删除Django查询集中的重复项

时间:2019-06-04 17:18:08

标签: python django

我有以下Django查询:

AUSTF = TSF.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()
AUSTU = TSU.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()
AUSTJS = JSP.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()

这将产生具有相同返回值的输出,例如:

123.456.789
website.com
123.456.789
website.com

我要提取所有three objects,并删除所有重复项,然后再输出到模板中。 distinct()方法对单个对象执行此操作,但在模板中输出时不对所有对象执行此操作。

我认为将这三个对象附加到元组可能可行,但这还没有解决。

有人可以帮忙吗?谢谢


我在想什么

ScannedT = set(AUsersScannedTldsForms,AUsersScannedTldsUrls,AUsersScannedTldsJS)

输出到模板

{% if ScannedT %}
        {% for s in ScannedT %}
        <li><span>{{ s.FKToTld__dNm }}</li>         
        {% endfor %}
{% else %}
wah
{% endif %}

2 个答案:

答案 0 :(得分:0)

如果您的非重复用户使用不同的模型,则可以仅从该模型开始,而不必使用所有3个模型。我猜您对模型/字段名称有些困惑,但我会认为:

T.objects.filter(FKtoUser=request.user).values('dNm').distinct()

将完成此任务。除非有更深层次的原因,否则我就缺少您为什么要从其他3种模型开始的信息了。

答案 1 :(得分:0)

您可以转换为列表,然后放入一个集合中,这样可以消除重复项。

AUSTF = TSF.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()
AUSTU = TSU.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()
AUSTJS = JSP.objects.filter(FKToT__FKToUser=request.user).values('FKToT__dNm').distinct()

# convert to 3 lists
austf_list = list(AUSTF.values_list('FKToT__dNm', flat=True))
austu_list = list(AUSTU.values_list('FKToT__dNm', flat=True))
austjs_list = list(AUSTJS.values_list('FKToT__dNm', flat=True))

# combine all 3 lists, then convert to a set (which eliminates duplicates)
ScannedT = set(austf_list + austu_list + austjs_list)