noted by Russ McGee, but I use straight introspection combined with a
knowledge of naming conventions, as follows:
# This function looks only at passed in object, not its derived
subobjects
# If you want items from the most derived class or whatever, get that
object first
# and then call this function on it.
def getRelatedManagerNamesAndObjects(object,namePrefix=None): #
returns a list of name-value pairs
if namePrefix == None:
namePrefix = ''
namesAndValues = []
for name in dir(object):
if not name.startswith(namePrefix):
continue
try:
value = getattr(object,name)
except:
continue
typeStr = str(type(value))
if typeStr.find('RelatedManager') != -1:
namesAndValues.append((name,value))
return namesAndValues
It doesn't find 121 relationships, only m21 (FK) and m2m, but that's
what I want to find. I use a similar introspection method to find 121
relationships, which for me all result from multi-level multi-table
inheritance. So far both methods have worked fine for me. They may
seem a little inefficient but I don't do them that often and I assume
that the resources they use are nothing compared to the joins that are
needed to get the actual data I'm looking for (i.e. queries made on
the returned related managers).
-- John
On Dec 27, 9:01 pm, Daniel Kaplun <m...@dvir.us> wrote:
> How do I get all models with FKs, M2Ms, or 121s pointing to a given
> model?
>
> I am using djcelery. I have a BakedModel with a FK to TaskMeta, which
> is the model that stores task status (I only care whether it is
> complete). I want to generate a query set that will return all
> instances of a given model where all deep references to and from the
> instance that are TaskMeta instances have status=SUCCESS. Currently, I
> am able to perform said operation for all relations from a given
> model, but the other way -- to a given model.http://paste.pocoo.org/show/526681/
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment