Вручную создайте QuerySet Django или, скорее, вручную добавьте объекты в QuerySet
В принципе, мне нужен грациозный способ сделать следующее: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
Возможно, я не думаю правильно, но делать что-то вроде следующего кажется мне бесконечно глупо: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
Да, мне нужно получить QuerySet Model2 для последующего использования (в частности, для перехода к форме Django).
В первом блоке кода выше, даже если я использую filter
вместо get
, я, очевидно, буду иметь QuerySet Model1. Обратный поиск не всегда возможен в моем случае.
Ответы
Ответ 1
Если вы просто хотите создать набор запросов для элементов, которые вы выбираете с помощью сложного процесса, не представляемого в SQL, вы всегда можете использовать оператор __in
.
wanted_items = set()
for item in model1.objects.all():
if check_want_item(item):
wanted_items.add(item.pk)
return model1.objects.filter(pk__in = wanted_items)
Вам, очевидно, придется адаптировать это к вашей ситуации, но он должен по крайней мере дать вам отправную точку.
Ответ 2
Чтобы вручную добавить объекты в QuerySet, попробуйте _result_cache
:
objs = ObjModel.objects.filter(...)
len(objs) #or anything that will evaluate and hit the db
objs._result_cache.append(yourObj)
PS: Я не понял (или попытался) вопрос chefsmart, но я считаю, что это отвечает на вопрос в заголовке.
Ответ 3
Вы не можете вручную добавлять объекты в QuerySet. Но почему бы вам не поместить их в список?
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2 = list(obj1, obj2)
Ответ 4
use d = insp.registered_tasks()