Django - 选择与其链接的模型

2024-06-01 08:49:57 发布

您现在位置:Python中文网/ 问答频道 /正文

果冻!你知道吗

我现在正在与django合作,我有一个问题,我怀疑有一个简单的解决方案,但我有很多困难,试图找到它(大多数相关的关键字往往指向错误的地方谷歌)。你知道吗

我希望根据以下条件过滤查询:模型有一个指向自身的字段。你知道吗

我举个例子:

class Person(models.Model):
    name = models.CharField(max_length=20)
    parent = models.ForeignKey('app.Person', null=True)

gramps = Person.objects.create(name='Tod', parent=None)
pops = Person.objects.create(name='Hank', parent=gramps)
sonny_boy = Person.objects.create(name='Tim', parent=pops)

temporal_paradox_dude = Person.objects.create(name='Emmett')
temporal_paradox_dude.parent = temporal_paradox_dude
temporal_paradox_dude.save()

temporal_paradox_dude_2 = Person.objects.create(name='Arnold')
temporal_paradox_dude_2.parent = temporal_paradox_dude_2
temporal_paradox_dude_2.save()

所以问题是,在这种情况下,我如何查询Person表,只针对那些暂时矛盾的人?你知道吗

>>> Person.objects.filter(parent=SOME_WAY_OF_DECLARING_ITSELF)
[ 'Emmett', 'Arnold' ]

我需要用什么来替换SOME_WAY_OF_DECLARING_ITSELF,才能得到链接到自身的模型?你知道吗

谢谢!你知道吗


Tags: name模型objectsmodelssavecreateparentperson
2条回答

我想你在找这样的东西

from django.db.models import F

Person.objects.filter(parent_id=F('id'))

您可以执行一个简单的查询,然后通过遍历该查询进行筛选:

results = [x for x in Person.objects.all() if x.parent == x]

相关问题 更多 >