I am trying to migrate these two models:
# models.py
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=64)
class Person2Person(models.Model):
person = models.ForeignKey(Person)
friend = models.ForeignKey(Person)
But I have got this error:
SystemCheckError: System check identified some issues:
ERRORS:
website.Person2Person.friend: (fields.E304) Reverse accessor for 'Person2Person.friend' clashes with reverse accessor for 'Person2Person.person'.
HINT: Add or change a related_name argument to the definition for 'Person2Person.friend' or 'Person2Person.person'.
website.Person2Person.person: (fields.E304) Reverse accessor for 'Person2Person.person' clashes with reverse accessor for 'Person2Person.friend'.
HINT: Add or change a related_name argument to the definition for 'Person2Person.person' or 'Person2Person.friend'.
I want to make a relationship many-to-many in the model Person. Why is my code wrong? And how should I fix it?
The code is wrong because Person will get a reverse relationship back to Person2Person.person, and also to Person2Person.friend; the default name would be Person.person2person_set but Django can't use the same name for both.
So you could set a related_name on either, or both:
class Person2Person(models.Model):
person = models.ForeignKey(Person, related_name='person2persons')
friend = models.ForeignKey(Person, related_name='friends')
Now Person.friend's related to the Person2Person objects that have this Person as a friend, and Person.person2person to the ones that have this Person as a person.
However, why aren't you using a ManyToManyField to 'self' on Person?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With