How can I make an order_by
like this ....
p = Product.objects.filter(vendornumber='403516006')\
.order_by('-created').distinct('vendor__name')
The problem is that I have multiple vendors with the same name, and I only want the latest product by the vendor ..
Hope it makes sense?
I got this DB error:
SELECT DISTINCT ON expressions must match initial ORDER BY expressions LINE 1: SELECT DISTINCT ON ("search_vendor"."name") "search_product"...
Based on your error message and this other question, it seems to me this would fix it:
That is, it seems that the
DISTINCT ON
expression(s) must match the leftmostORDER BY
expression(s). So by making the column you use indistinct
as the first column in theorder_by
, I think it should work.Just matching leftmost order_by() arg and distinct() did not work for me, producing the same error (Django 1.8.7 bug or a feature)?
however it worked when I changed to:
and I do not even have multiple order_by args.
I had a similar issue but then with related fields. With just adding the related field in
distinct()
, I didn't get the right results.I wanted to sort by
room__name
keeping theperson
(linked toresidency
) unique. Repeating the related field as per the below fixed my issue:See also these related posts: