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" ...
あなたのエラーメッセージと この他の質問 に基づいて、これはそれを修正すると思われます:
p = Product.objects.filter(vendornumber='403516006')\
.order_by('vendor__name', '-created').distinct('vendor__name')
つまり、DISTINCT ON
式は左端のORDER BY
式と一致する必要があるようです。したがって、distinct
で使用する列をorder_by
の最初の列として作成することで、機能するはずです。
左端のorder_by()argとdistinct()を一致させるだけでは機能せず、同じエラー(Django 1.8.7のバグまたは機能)が発生しましたか?
qs.order_by('project').distinct('project')
ただし、次のように変更すると機能しました:
qs.order_by('project_id').distinct('project')
また、複数のorder_by引数もありません。
私は同様の問題を抱えていましたが、その後に関連するフィールドがありました。 distinct()
に関連フィールドを追加しただけでは、正しい結果が得られませんでした。
room__name
でソートして、person
(residency
にリンク)を一意に保ちたいと思いました。以下のように関連フィールドを繰り返すと、問題が修正されました。
.order_by('room__name', 'residency__person', ).distinct('room__name', 'residency__person')
関連記事もご覧ください。
別のフィールドで区別して並べ替えるために別のフィールドを使用したい場合は、以下のコードを使用できます
from Django.db.models import Subquery
Model.objects.filter(
pk__in=Subquery(
Model.objects.all().distinct('foo').values('pk')
)
).order_by('bar')