如何使用 Django Querysets 和 Q() 与相同模型类型的对象进行比较?
Posted
技术标签:
【中文标题】如何使用 Django Querysets 和 Q() 与相同模型类型的对象进行比较?【英文标题】:How can I use Django Querysets and Q() to compare against objects of the same model type? 【发布时间】:2014-01-16 08:10:46 【问题描述】:我有一个名为 MyModel 的 Django 模型。 m 是 MyModel 的一个实例。 我想使用 Django QuerySets 来查找所有不是 m 的 MyModel 实例。 怎么做?这不起作用:
MyModel.objects.filter(~Q(m))
您似乎可以使用 Q() 查询 MyModel 的属性。但是,我不知道如何使用 Q 来包含/排除 MyModel 本身的实例。这是可行的吗?如果是这样,怎么做?如果没有,什么是最有效和最优雅的方式来完成我正在尝试做的事情?
【问题讨论】:
【参考方案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])
【讨论】:
@SaqibAli -- 查看修改后的答案以上是关于如何使用 Django Querysets 和 Q() 与相同模型类型的对象进行比较?的主要内容,如果未能解决你的问题,请参考以下文章
Django QuerySets - 如何注释一个字段但返回另一个字段?
有没有办法在 Django Querysets 中组合注释和过滤聚合?