70👍
Passing an argument to distinct doesn’t work for MySQL-databases (AFAIK)
This one works and returns just one object:
Entity.objects.order_by('foreign_key').values('foreign_key').distinct()
69👍
Perhaps you might want to go with this:
Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
- [Django]-How to run this code in django template
- [Django]-Error: could not determine PostgreSQL version from '10.3' – Django on Heroku
- [Django]-Charts in django Web Applications
51👍
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
distinct
does not work without order_by
, as explained in Django documentation:
Any fields used in an
order_by()
call are included in the SQLSELECT
columns. This can sometimes lead to unexpected results when used in
conjunction withdistinct()
. If you order by fields from a related
model, those fields will be added to the selected columns and they may
make otherwise duplicate rows appear to be distinct. Since the extra
columns don’t appear in the returned results (they are only there to
support ordering), it sometimes looks like non-distinct results are
being returned.Similarly, if you use a
values()
query to restrict the columns
selected, the columns used in anyorder_by()
(or default model
ordering) will still be involved and may affect uniqueness of the
results.The moral here is that if you are using
distinct()
be careful about
ordering by related models. Similarly, when usingdistinct()
and
values()
together, be careful when ordering by fields not in the
values()
call.
- [Django]-How do I force Django to ignore any caches and reload data?
- [Django]-Remove Labels in a Django Crispy Forms
- [Django]-Get list item dynamically in django templates
9👍
Entity.objects.order_by('foreign_key').distinct('foreign_key')
If you already have them as a list, then convert it to a set()
to get the distinct values.
- [Django]-Django – limiting query results
- [Django]-Django: manage.py does not print stack trace for errors
- [Django]-Why does django run everything twice?