【问题标题】:How can I use Django Querysets and Q() to compare against objects of the same model type?如何使用 Django Querysets 和 Q() 与相同模型类型的对象进行比较?
【发布时间】:2014-01-16 08:10:46
【问题描述】:
我有一个名为 MyModel 的 Django 模型。 m 是 MyModel 的一个实例。
我想使用 Django QuerySets 来查找所有不是 m 的 MyModel 实例。
怎么做?这不起作用:
MyModel.objects.filter(~Q(m))
您似乎可以使用 Q() 查询 MyModel 的属性。但是,我不知道如何使用 Q 来包含/排除 MyModel 本身的实例。这是可行的吗?如果是这样,怎么做?如果没有,什么是最有效和最优雅的方式来完成我正在尝试做的事情?
【问题讨论】:
标签:
django
django-models
django-queryset
django-q
【解决方案1】:
使用模型的pk(主键)字段:
MyModel.objects.exclude(pk=m.pk)
要排除另一个模型n(在下面的评论中提出其他问题),您可以这样做:
MyModel.objects.exclude(pk=m.pk).exclude(pk=n.pk)
更一般地说,要排除 list_of_instances 的实例列表,请使用 __in 语法:
MyModel.objects.exclude(pk__in=[instance.pk for instance in list_of_instances])