Django: извлечение объекта `Q` из` QuerySet` - PullRequest
7 голосов
/ 14 марта 2012

У меня есть Django QuerySet, и я хочу получить из него Q объект.(т.е. он содержит тот же запрос, что и этот набор запросов.)

Возможно ли это?И если да, то как?

Ответы [ 3 ]

4 голосов
/ 14 марта 2012

Нет, но вы могли бы сначала создать объект Q и использовать его; в качестве альтернативы, создайте запрос как dict и передайте его методу фильтра и объекту Q.

3 голосов
/ 15 марта 2012

Это не совсем то, что вы просили, но вы можете извлечь sql из набора запросов, открыв член запроса.Например:

x = somequeryset.query

Затем вы можете использовать это для нового объекта набора запросов, чтобы восстановить исходный набор запросов.Это может работать лучше при сохранении таких вещей, как «значения», которые определены для набора запросов.Определенный х легко хранить.В прошлом я использовал это для сохранения пользовательских запросов / поисков, которые затем выполняются ежедневно, а результаты отправляются пользователю по электронной почте.

0 голосов
/ 16 марта 2018

Также важно, если вы хотите, чтобы объект Q был таким, чтобы вы могли восстановить сложный запрос, применив к нему другой объект Q, - если два набора QuerySets находятся в одной модели, вы можете ИЛИ наборы QuerySets напрямую для того же эффекта. Стоит попробовать и изучить SQL до и после.

Например:

qs1 = model.objects.filter(...)
print("qs1: {}".format(qs1.query)
qs2 = model.objects.filter(...)
print("qs2: {}".format(qs1.query)
qs = q1 | q2
print("qs: {}".format(qs.query)

Я определенно нашел ваш вопрос, потому что по этой причине я хотел получить объект Q из запроса и обнаружил в группе пользователей Django:

https://groups.google.com/d/msg/django-users/2BuFFMDL0VI/dIih2WRKAgAJ

что QuerySets можно комбинировать во многом так же, как это делают объекты Q.

Это может или не может быть полезным для вас, в зависимости от причины, по которой вы, конечно, хотите этот объект Q.

...