#python #django
#питон #джанго
Вопрос:
Мне интересно, можно ли выбрать разные значения из одного и того же набора запросов. У меня есть набор запросов следующим образом
links = Model.objects.filter(some_filters)
ect.
return links.values('parent_id', 'child_id', 'type', 'date')
Что я хотел бы сделать, так это вернуть как приведенный выше список, так и отдельный список child_ids без необходимости создавать новый запрос. Например, если приведенное выше возвращает:
[(1, 2, 'child', 'some_date'), (2, 3, 'child', 'some_date')]
Я бы хотел, чтобы вместо этого он вернулся
[2, 3], [(1, 2, 'child', 'some_date'), (2, 3, 'child', 'some_date')]
Возможно ли это без создания нового набора запросов?
Комментарии:
1. Разве ты не хочешь
[1, 2, 3, 4]
? Почему только значения из второго?2. В той же модели есть такие поля , как
parent_id
иchild_id
? Для меня это похоже на ненормализованную схему базы данных.3. Эта таблица представляет собой отношение «многие ко многим», показывающее связи между элементами в другой таблице. service_item_links имеет parent_id и child_id из service_items, если это имеет смысл. Я бы хотел просто найти отдельный список child_ids.
Ответ №1:
После присвоения первого набора запросов переменной вы можете получать из нее разные наборы запросов, не обращаясь к БД:
links = Model.objects.filter(some_filters)
q1 = links.values_list('child_id')
q2 = links.values_list('parent_id', 'child_id', 'type', 'date')
return q1, q2
Ответ №2:
Вы можете перебирать свои результаты, чтобы извлечь только эти дочерние идентификаторы, и проверять на каждой итерации, есть ли этот идентификатор уже там
child_ids = []
for record in results:
if (record[1] not in child_ids):
child_ids.append(record[1])