Django: list all reverse relations of a model Django: list all reverse relations of a model django django

Django: list all reverse relations of a model


This was changed (in 1.8 I think) and Olivier's answer doesn't work anymore. According to the docs, the new way is

[f for f in Item._meta.get_fields()    if f.auto_created and not f.concrete]

This includes one-to-one, many-to-one, and many-to-many.


I've found out that there are methods of Model._meta that can give me what I want.

my_model = get_model('app_name','model_name')# Reverse foreign key relationsreverse_fks = my_model._meta.get_all_related_objects()# Reverse M2M relationsreverse_m2ms = my_model._meta.get_all_related_many_to_many_objects()

By parsing the content of the relations, I can guess whether the "direct" field was a OneToOneField or whatever.


And what about this :

oneToOneFieldNames = [    field_name     for field_name in Item._meta.get_all_field_names()     if isinstance(        getattr(            Item._meta.get_field_by_name(field_name)[0],             'field',             None        ),         models.OneToOneField    )]

RelatedObject may have a Field attribute for relations. You just have to check if this is a OneToOne field and you can retrieve only what you want