Django возвращает список объектов и список идентификаторов из одного и того же набора запросов

#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])