Django order_by()过滤器使用distinct()

 嘿听tj说你是被搞出来的 发布于 2023-02-10 14:27

我怎么能这样做order_by......

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

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

希望有道理吗?

我收到了这个DB错误:

SELECT DISTINCT ON表达式必须匹配初始ORDER BY表达式LINE 1:SELECT DISTINCT ON("search_vendor"."name")"search_product"...

Stop ongoing.. 47

根据您的错误消息和另一个问题,在我看来这将解决它:

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

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

2 个回答
  • 只匹配最左边的order_by()arg和distinct()对我来说不起作用,产生相同的错误(Django 1.8.7 bug或一个功能)?

    qs.order_by('project').distinct('project')
    

    但当我改为:

    qs.order_by('project_id').distinct('project')
    

    我甚至没有多个order_by args.

    2023-02-10 14:30 回答
  • 根据您的错误消息和另一个问题,在我看来这将解决它:

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

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

    2023-02-10 14:30 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有