вручную создать Django QuerySet или, вернее, вручную добавить объекты в QuerySet - PullRequest
23 голосов
/ 03 августа 2010

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

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).

В первом блоке кода выше, даже если вместо этого я использую filterget Очевидно, у меня будет QuerySet Model1.Обратный поиск не всегда возможен в моем случае.

Ответы [ 4 ]

35 голосов
/ 03 августа 2010

Если вы просто хотите создать набор запросов из элементов, которые вы выбираете с помощью какого-то сложного процесса, не представляемого в SQL, вы всегда можете использовать оператор __in.чтобы приспособить это к вашей ситуации, но это должно по крайней мере дать вам отправную точку.

16 голосов
/ 26 ноября 2011

Чтобы вручную добавить объекты в 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, но я считаю, что это ответы на вопрос в заголовке.

4 голосов
/ 28 октября 2010

Вы не можете вручную добавлять объекты в QuerySet. Но почему бы вам не поместить их в список?

obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2 = list(obj1, obj2)
0 голосов
/ 07 февраля 2013
use d = insp.registered_tasks()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...