鉴于在sqlite3中实现了以下模型
class Parent(models.Model):
pass
class Children(models.Model):
parent=models.ForeignKey(Parent,primary_key=True)
将数据从电子表格导入儿童后,我需要获得一份没有孩子的父母名单,为此我正在使用......
Parent.objects.filter(children__isnull=True)
似乎工作正常。
但由于没有执行参照完整性,我还需要一份没有父母的儿童名单,为此我正在努力......
Children.objects.filter(parent__isnull=True)
返回一个空的查询集,即使有些是孤儿? 关于实现这一目标的最佳方式的任何指示都将非常感激。
顺便说一句,我知道我可以在导入过程中找到孤儿,但这不符合我的目的。
答案 0 :(得分:2)
使用Django允许嵌套查询的事实:
def Foo(request):
parent_ids=Parent.objects.values('id')
orphans=Children.objects.exclude(parent_id__in=parent_ids)
return render_to_response('Foo.html', {'orphans':orphans})
答案 1 :(得分:1)
还没有答案,所以这是我尝试回答我自己的问题
这是一个有效的丑陋解决方案......
def Foo(request):
orphans=[]
for child in Children.objects.all():
try:
if child.parent:
pass
except Parent.DoesNotExist:
orphans.append(child)
return render_to_response('Foo.html',{'orphans':orphans})
希望有更好的方法吗?
更新改进方法......
def Foo(request):
parent_id_list=[row.pk for row in Parent.objects.all()]
orphans=Children.objects.exclude(pk__in=parent_id_list)
return render_to_response('Foo.html',{'orphans':orphans})