Django What is reverse relationship?

Here is the documentation on related_name

Lets say you have 2 models

class Group(models.Model):
    #some attributes

class Profile(models.Model):
    group = models.ForeignKey(Group)
    #more attributes

Now, from a profile object, you can do profile.group. But if you want the profile objects given the group object, How would you do that? Thats’ where related name or the reverse relationship comes in.

Django, by defaults gives you a default related_name which is the ModelName (in lowercase) followed by _set – In this case, It would be profile_set, so group.profile_set.

However, you can override it by specifying a related_name in the ForeignKey field.

class Profile(models.Model):
    group = models.ForeignKey(Group, related_name="profiles")
    #more attributes

Now, you can access the foreign key as follows:

group.profiles.all()

Leave a Comment