当前位置: 首页 > 面试题库 >

Django仅选择具有重复字段值的行

融烨磊
2023-03-14
问题内容

假设我们在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 Count
Literal.objects.values('name')
               .annotate(Count('id')) 
               .order_by()
               .filter(id__count__gt=1)

这与使用Django所获得的效果非常接近。问题在于这将返回一个ValuesQuerySetwith namecount。但是,你可以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])


 类似资料:
  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 这个问题已经在这里有了答案 : 检索每个组中的最后一个记录-MySQL (27个答案) 去年关闭。 我有此表用于文档(此处为简化版): 如何为每个ID选择一行,而仅选择最大转速? 根据上述数据,结果应包含两行:和。我正在使用 MySQL 。 目前,我在循环中使用检查来检测

  • 我有一个表格结构 如何使用条件?我尝试使用这个,但结果是

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 选择MySQL中除一列以外的所有列? 我想知道是否有一种方法可以从数据库的表中选择除一个字段以外的所有其他字段。 我知道我可以在选择查询中描述字段名称。 例如: 但是我的问题是,有没有办法以一种简单的方式做到这一点呢? 我正在使用MySQL和Zend框架。 问题答案: 你可以很容易做到 假设您的字段是id = 5 然后 如果你的

  • 问题内容: 我有一个Django应用程序,想要在用户的个人资料中显示多个选择复选框。然后,他们将能够选择多个项目。 这是我的models.py的简化版本: 和我的形式课: 还有我的views.py: 我可以看到POST仅发送一个值: 并且本地vars参数正在发送一个列表: 所有表单字段都显示正确,但是当我提交POST时,我得到一个错误 错误绑定参数7-可能是不受支持的类型。 我是否需要在视图中进一

  • 问题内容: 我需要具有2个字段的django modelform,其中第二个字段选择列表取决于在第一个字段中选择的内容。我的模特: 如果vehicle_type设置为 personal, 如何将 make 字段的选择设置为 PERSONAL_MAKES ?我怎样才能做到这一点?在模型级别上可以吗? __ 问题答案: 您可能不能,因为这取决于用户与表单的交互:您的服务器无法预先知道用户将表单发送到浏

  • 我有一个业务表,每个业务最多可以有3个电话号码。我想查找任何重复的电话号码,但由于电话号码在不同的列中,我认为无法使经典的查询工作。 示例数据: 在本例中,我希望将记录1、2和3标识为相同。简单地将电话号码555-551-5555标识为一个重复的号码就可以了,因为我可以做一个子查询,或者呼叫程序可以使用该电话号码并发送一个新的查询,获得3个电话列中任何一个列中的所有记录555-551-5555。