Mad*_*di7 0 python django relationship
我已经知道,我可以在同一模型中实现ForeignKey父子关系,从而可以与1个parent =多个孩子创建关系。但是,如何在同一模型中完成多对多关系?此刻,我编写并测试了这一点:
class Person(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
parents = models.ManyToManyField(
'self', blank=True
)
Run Code Online (Sandbox Code Playgroud)
它可以工作,但不像我预期的那样。它的作用是:
john = Person.objects.get(id=1)
sam = Person.objects.get(id=2)
>>> john.parents.all()
<QuerySet [<Person: Alex>, <Person: Peter>, <Person: Sam>]>
>>> sam.parents.all()
<QuerySet [<Person: John>]>
Run Code Online (Sandbox Code Playgroud)
如您所见,Sam应该是John的孩子,而不是他的孩子和父母。我想要的是在检索sam.parents.all()时得到约翰,但不是在检索john.parents.all()时得到山姆。
有没有办法实现我想要的?还是至少不能使用这种逻辑?我是否必须使用同一应用程序创建第二个单独的模型?
如文档所示,您需要symmetrical=False在该字段上进行设置,以防止其自动使用相反的相同关系。为了使事情更加清楚,您可以设置related_name一些相关的内容,例如“儿童”。
parents = models.ManyToManyField(
'self', blank=True, symmetrical=False, related_name='children'
)
Run Code Online (Sandbox Code Playgroud)
现在您可以john.children.all()得到山姆。
(请注意,由于人们对此似乎常常感到困惑,因此此处related_name并不需要;但是默认值是person_set这种情况,不如children。)
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |