Подтвердить что ты не робот

Вручную создайте 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. Обратный поиск не всегда возможен в моем случае.

4b9b3361

Ответ 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()