Django обратный поиск конкретный пример

У меня есть два модельных класса, Person а также Relationship следующим образом с полями, опущенными для краткости:

class Person(models.Model):
    first_name = models.CharField(max_length=32, null=True)
    .
    .
    .
    relationship = models.ManyToManyField('Relationship', related_name='relative')


class Relationship(models.Model):
    person = models.ForeignKey('Person', related_name='relative', null=True)

Допустим, человек А является отцом, а человек Б - дочерью. Я бы создал их следующим образом:

personA = Person()
personA.first_name = "Father"
personA.save()

personB = Person()
personB.first_name = "Daughter"
personB.save()

Тогда отношения между ними:

daughterRelationship = Relationship()
daughterRelationship.person = personB
daughterRelationship.save()
personA.relationship.add(daughterRelationship)

fatherRelationship = Relationship()
fatherRelationship.person = personA
fatherRelationship.save()
personB.relationship.add(fatherRelationship)

Теперь, основываясь на моих моделях (возможно, related_name='lative 'вызывает проблему), но я не могу понять, какое у меня имя обратного поиска.

Я пробовал это, но безрезультатно:

relationship = Relationship.objects.get(id=1)
personA = relationship.person
personB = relationship.relative_set.all().get() # Relationship does not have attribute 'relative_set'
personB = relationship.person_set.all().get() # Relationship does not have attribute 'person_set'
personB = relationship.relationship_set.all().get() # Relationship does not have attribute 'relationship_set'
personB = relationship.personrelationship_set.all().get() # Relationship does not have attribute 'personrelationship_set'
personB = relationship.personrealtive_set.all().get() # Relationship does not have attribute 'personrelative_set'

Я не могу понять, кто-нибудь еще может видеть, что происходит, или какие-либо предложения? Благодарю.

2 ответа

Решение

Я думаю, что эта ситуация лучше подходит для рекурсивного отношения человека к себе через Relationship,

Понял, related_name='relative' создавал обратный поиск как relative вместо relative_set,

relationship = Relationship.objects.get(id=1)
personA = relationship.person
personB = relationship.relative.all().get()
Другие вопросы по тегам