【问题标题】:Exclude fields with the same value using Django querysets使用 Django 查询集排除具有相同值的字段
【发布时间】:2021-06-20 06:53:38
【问题描述】:

在我的项目中,我有具有相同值“标题”的文章和用户响应。我只想找到第一个文章,因为其他对象具有相同的“标题”,这些是用户的答案。如何从查询集中排除具有相同“标题”参数的对象。

我试试这个:

q1 = Article.objects.order_by().values('title').distinct()

* 效果很好,但它会返回类似列表的内容。

好吧,我尝试将其转换为查询:

q2 = Article.objects.filter(title__in=q1).distinct()

*但它会导致它再次返回所有重复主题文章。

如何从查询集中排除具有相同标题的对象而不将它们更改为列表?

【问题讨论】:

  • 这个主题是我用来创建查询的,但是它将对象变成了一个列表。我需要一个带有对象的查询集。
  • @MaddieGraham,试试这个:Article.objects.filter(title__in=q1).order_by('title').distinct('title')
  • 在我的情况下它返回:此数据库后端不支持 DISTINCT ON 字段

标签: django django-queryset


【解决方案1】:

仅在 PostgreSQL 上,您可以传递位置参数 (*fields) 以指定应应用 DISTINCT 的字段名称。

如果是您的情况,则必须执行以下操作:

Article.objects.filter(title__in=q1).order_by('title').distinct('title')

【讨论】:

  • 但是,如果我使用 sqlite 呢?
  • @MaddieGraham 注意:你不应该在生产服务器中使用 sqlite
  • @MaddieGraham,可能是这样的:pks = queryset.values_list('pk', flat=True).order_by('title').distinct('title'); Article.objects.filter(pk__in=pks)
猜你喜欢
  • 2018-09-14
  • 2013-04-08
  • 2018-10-11
  • 2020-06-16
  • 1970-01-01
  • 2017-08-26
  • 2020-03-07
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多