Django: извлечение объекта " Q " из " QuerySet`

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

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

3 ответов


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


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

x = somequeryset.query

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


релевантно также, если вы хотите объект Q, чтобы вы могли восстановить сложный запрос, вызвав к нему другой объект Q, является то, что, если два запроса находятся на одной модели, вы можете или запросы непосредственно для того же эффекта. Стоит попробовать это и изучить 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

что запросы могут быть объединены так же, как и объекты Q.

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