How to call app name when calling a one to one model in django?

Viewed 114

This is my apps:

user
students
university

Now, how to use same names for two model ? for instance each student and university have profile model. At first when i do "Class Profile" under student

It gets a new table named student_profile

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

now in students app i can user 

student_profile = request.user.profile

But how to do the same for university ? The table gets created like

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

But how to use on views ?

university_profile = request.user.profile

How to use the app name when calling user.request.profile ?

1 Answers

You can set a unique related name for the one to one field, to be able to distinguish between the two profiles from user, so:

For university:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='university_profile')

For student:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='student_profile)

Then you should be able to access both profiles from user:

print(request.user.student_profile)
print(request.user.university_profile)
Related