Django仅选择具有重复字段值的行
假设我们在Django中有一个定义如下的模型:
class Literal: name = models.CharField(...)
...
名称字段不是唯一的,因此可以具有重复的值。我需要完成以下任务:从模型中选择具有至少一个name字段重复值的所有行。
我知道如何使用普通的SQL来做到这一点(可能不是最好的解决方案):
select * from literal where name IN ( select name from literal group by name having count((name)) > 1
);
因此,可以使用django ORM选择它吗?还是更好的SQL解决方案?
回答:
尝试:
from django.db.models import CountLiteral.objects.values('name')
.annotate(Count('id'))
.order_by()
.filter(id__count__gt=1)
这与使用Django所获得的效果非常接近。问题在于这将返回一个ValuesQuerySet
with name
和count
。但是,你可以QuerySet
通过将其反馈给另一个查询来使用它来构造一个常规:
dupes = Literal.objects.values('name') .annotate(Count('id'))
.order_by()
.filter(id__count__gt=1)
Literal.objects.filter(name__in=[item['name'] for item in dupes])
以上是 Django仅选择具有重复字段值的行 的全部内容, 来源链接: utcz.com/qa/426659.html