爽!
我现在正在与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
以获取链接到自己的模型吗?
谢谢!
答案 0 :(得分:1)
我认为你在找这样的东西;
from django.db.models import F
Person.objects.filter(parent_id=F('id'))
答案 1 :(得分:0)
您可以执行简单查询,然后通过遍历该查询进行过滤:
results = [x for x in Person.objects.all() if x.parent == x]