Django Model - Get distinct value list

后端 未结 4 530
说谎
说谎 2020-12-13 23:59

I try to get a list of distinct foreign keys and I wrote this:

my_ids = Entity.objects.values(\'foreign_key\').distinct()

But I get just a

相关标签:
4条回答
  • 2020-12-14 00:15
    Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
    

    distinct not work with out order by

    Any fields used in an order_by() call are included in the SQL SELECT columns. This can sometimes lead to unexpected results when used in conjunction with distinct(). 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 any order_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 using distinct() and values() together, be careful when ordering by fields not in the values() call.

    https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

    0 讨论(0)
  • 2020-12-14 00:18
    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.

    0 讨论(0)
  • 2020-12-14 00:20

    Perhaps you might want to go with this:

    Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
    
    0 讨论(0)
  • 2020-12-14 00:21

    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()

    0 讨论(0)
提交回复
热议问题