58

どうやったらこんなの作れるんだろうorder_by....

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

問題は、同じ名前のベンダーが複数あり、そのベンダーの最新の製品だけが欲しい..

それが理にかなっていると思いますか?

次の DB エラーが発生しました。

SELECT DISTINCT ON 式は最初の ORDER BY 式と一致する必要があります 行 1: SELECT DISTINCT ON ("search_vendor"."name") "search_product"...

4

4 に答える 4

75

エラーメッセージとこの他の質問に基づいて、これで修正されるようです:

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

つまり、DISTINCT ON式は左端の式と一致する必要があるようORDER BYです。で使用する列をdistinctの最初の列にするorder_byことで、うまくいくと思います。

于 2013-12-14T12:22:59.953 に答える
24

左端の order_by() 引数と distinct() を一致させるだけでは機能せず、同じエラーが発生しました (Django 1.8.7 のバグまたは機能)?

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

ただし、次のように変更すると機能しました:

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

複数の order_by 引数すらありません。

于 2015-11-25T14:48:00.950 に答える