如何使用Django Querysets和Q()来比较相同模型类型的对象?

时间:2013-12-29 06:07:01

标签: django django-models django-queryset django-q

我有一个名为MyModel的Django模型。 m是MyModel的一个实例。 我想使用Django QuerySets来查找不是m的MyModel的所有实例。 怎么做?这不起作用:

MyModel.objects.filter(~Q(m))

您似乎可以使用Q()查询MyModel的属性。但是,我不知道如何使用Q来包含/排除MyModel本身的实例。这可行吗?如果是这样,怎么样?如果没有,那么最有效和最优雅的方式是什么才能实现我想要做的事情?

1 个答案:

答案 0 :(得分:4)

使用模型的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])