Удалить дубликаты через наборы запросов Django - PullRequest
0 голосов
/ 04 июня 2019

У меня есть следующие запросы 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 голосов
/ 04 июня 2019

Вы можете преобразовать в списки, а затем поместить в набор, который позволит устранить дубликаты.

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)
0 голосов
/ 04 июня 2019

Если ваше отличительное находится на другой модели, вы можете просто начать с этой модели, а не использовать все 3 модели. Я предполагаю, что вы немного запутали названия вашей модели / поля, но я подумаю:

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

сделает это. Если нет более глубокой причины, по которой мне не хватает того, почему вы хотите начать с других 3 моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...