Django 从 .values_list 查询中删除重复项,同时保留顺序

问题描述 投票:0回答:4

我有一个模型,其中包含一个 CharField

MyModel
。该模型具有应保留的默认元排序。我正在使用以下查询来获取类型列表 -

type

但是,类型正在重复。我可以做 
MyModel.objects.all().values_list('type', flat=True).distinct()

但这会改变我不想要的顺序。有没有什么方法可以按顺序获取类型列表,而无需在 python 中手动创建列表?也欢迎其他更快的解决方案。


Django 版本 - 1.11

python django django-queryset
4个回答
0
投票

使用此代码

.order_by('type').distinct()

而不是这个代码

MyModel.objects.all().values_list('type', flat=True).distinct("type")



0
投票

MyModel.objects.all().values_list('type', flat=True).distinct()

它会为你工作


0
投票

首先,获取具有唯一类型的记录的id并将它们保存在列表中:

MyModel.objects.all().values('type', flat=True).order_by('type').distinct()

然后使用 ids 进行过滤:

ids = list(MyModel.objects.values_list('id', flat=True).order_by('type').distinct('type'))



0
投票

MyModel.objects.values_list('type', flat=True).filter(id__in=ids)

然后,对于 python 3.6+:

types = MyModel.objects.all().values_list('type', flat=True).distinct()

对于以前的 Python 版本,请使用 
types = list(dict.fromkeys(types))

:

OrderedDict

© www.soinside.com 2019 - 2024. All rights reserved.