Как создать пустой запрос и добавить объекты вручную в django

Мне нужно создать набор запросов и вручную добавить некоторые объекты, полученные из разных запросов, чтобы отобразить их в таблице. Я использую xx = set(), но это не делает работу.

Ответы

Ответ 1

Вы можете сделать это одним из следующих способов:

from itertools import chain
#compute the list dynamically here:
my_obj_list = list(obj1, obj2, ...)
#and then 
none_qs = MyModel.objects.none()
qs = list(chain(none_qs, my_obj_list))

Вы также можете сделать:

none_qs = MyModel.objects.none()
qs = none_qs | sub_qs_1 | sub_qs_2

Однако это не сработает для нарезанных запросов

Ответ 2

Вы не можете этого сделать. Набор запросов представляет собой представление запроса к базе данных. Вы не можете добавлять элементы к нему вручную.

Но если вам нужна произвольная упорядоченная коллекция экземпляров модели, просто используйте список.

Ответ 3

Я очень опаздываю на это, но для будущей ссылки вы можете создать набор запросов со всем фильтром для объектов, которые имеют определенное свойство.

Фильтрация свойств объекта поля

Model.objects.filter(foo='bar')
Model.objects.exclude(foo='bar')

Фильтрация свойств объектов без полей

def return_queryset_with_desired_objects(self):
    qs = SomeModel.objects.all()
    wanted_ids = [obj.id for obj in qs if obj.foo]
    return self.filter(id__in=wanted_ids]

def return_queryset_without_undesired_objects(self):
    qs = SomeModel.objects.all()
    unwanted_ids = [obj.id for obj in qs if not obj.foo]
    return self.exclude(id__in=unwanted_ids]