如何使用distinct来获取唯一的模型实例,而不是值?

时间:2011-11-18 11:15:44

标签: django django-queryset

修改

我有几个具有相同字段值的记录。我需要过滤查询集以使模型实例包含唯一字段记录,而不仅仅是查询集中的值。 如何过滤查询集以保持实例仅包含一个字段的唯一值?

>>> dist = Language.objects.distinct()
>>> for i in dist:
>>>     print i.language     
>>> English
>>> English

>>> dist = Language.objects.values('language').distinct()
>>> for i in dist:
>>>     print i['language']     
>>> English

1 个答案:

答案 0 :(得分:0)

可能有一种更有效的方法,但首先想到的是:

ids = (lang['max_id'] for lang in Language.objects.values('language').annotate(max_id=Max('pk')))
results = Language.objects.filter(pk__in=ids)

基本上按语言分组并选择具有每种语言最高ID的字段记录。