我有一个名为MyModel的Django模型。 m是MyModel的一个实例。 我想使用Django QuerySets来查找不是m的MyModel的所有实例。 怎么做?这不起作用:
MyModel.objects.filter(~Q(m))
您似乎可以使用Q()查询MyModel的属性。但是,我不知道如何使用Q来包含/排除MyModel本身的实例。这可行吗?如果是这样,怎么样?如果没有,那么最有效和最优雅的方式是什么才能实现我想要做的事情?
答案 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])