Django order_by() 过滤器与 distinct()

标签 django django-models django-aggregation django-filters

如何制作这样的 order_by ....

p = Product.objects.filter(vendornumber='403516006')\
                   .order_by('-created').distinct('vendor__name')

问题是我有多个同名的供应商,我只想要供应商的最新产品..

希望它有意义?

我遇到了这个数据库错误:

SELECT DISTINCT ON expressions must match initial ORDER BY expressions LINE 1: SELECT DISTINCT ON ("search_vendor"."name") "search_product"...

最佳答案

根据您的错误消息和 this other question ,在我看来这会解决它:

p = Product.objects.filter(vendornumber='403516006')\
               .order_by('vendor__name', '-created').distinct('vendor__name')

也就是说,DISTINCT ON 表达式似乎必须匹配最左边的 ORDER BY 表达式。因此,通过将您在 distinct 中使用的列作为 order_by 中的第一列,我认为它应该有效。

关于Django order_by() 过滤器与 distinct(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582966/

相关文章:

python - 在 Django 中注释导致 'None' 值的 SUM 聚合函数

python - 日期范围内的 Django 聚合

python - 安装 django 1.9 后,Django 应用程序未显示在管理中

python - CommandError : Can't find xgettext. 与 django i18n

Django:如何聚合/注释多对多关系?

Django模型错误超出最大递归深度

python - django-rest-swagger 不能很好地与模型序列化器一起使用吗?

django - 如何获取使用 django bulk_create 创建的对象的主键

python - Django 。如何在发送电子邮件的管理站点中创建特定功能?

Django- 'WhereNode'对象没有属性 'output_field'错误