9👍
If a visit is a strong concept in your application, then it might make sense to have it the way you defined: visit consists of a ‘user user’ and a ‘user visitor’.
If, however, a visit is just a way in which users relate among themselves, then perhaps you should have a ManyToMany
relation between users. For that purpose you should probably use ManyToManyField.symmetrical in a User Profile (in which you extend the information that comes with auth.models.User
).
In any case, regarding the related_name, you may either disable the backwards relation if you won’t be accessing the visits from the user, or use a sensible name such as visits_to_self
on user
and visits_to_others
on visitor
, which would allow seeing who visited a user by calling user.visits_to_self
and who the user visited by user.visits_to_others
.
33👍
When you have a ForeignKey
, it creates a property named with the model name plus _set
to the referenced model. The problem here is that both foreign keys want to create a property on User
named visit_set
. The solution is to add related names that are different for each foreign key.
Usually, I use plurals for related names. In cases like these, I add an “as” clause to the related name:
class Visit(models.Model):
user = models.ForeignKey(User, related_name="visitsAsUser")
visitor = models.ForeignKey(User, related_name="visitsAsVisitor")
You don’t want a ManyToManyField
unless you can have zero or more visitors per Visit
, or users per Visit
.
- [Django]-How to specify an IP address with Django test client?
- [Django]-POST jQuery array to Django
- [Django]-Python 3 list(dictionary.keys()) raises error. What am I doing wrong?