Есть ли способ построить объект Q, который представляет собой EmptyQueryset, то есть который всегда возвращает пустой результат? - PullRequest
3 голосов
/ 17 марта 2011

В django я хочу получать объекты из базы данных в зависимости от атрибутов некоторых других объектов. Если один из других объектов не существует, он не должен влиять на результат запроса. Код такой:

from django.db.models import Q
try:
    objectA = MyModel.objects.get(id = idA)
    qA = Q(foo = objectA.bar)
except MyModel.DoesNot.Exist:
    qA = Q(???)
try:
    objectB = MyModel.objects.get(id = idB)
    qB = Q(abc = objectB.xyz)
except MyModel.DoesNot.Exist:
    qB = Q(???)
result = MyOtherModel.objects.filter(qA | qB, **other_filter_conditions)

Для Querysets существует метод none(), который всегда возвращает EmptyQueryset. Есть ли что-то похожее для объектов Q?

Или есть лучший способ решить мою проблему?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011
qList = []
try:
  objectA = ...
  qList.append(Q(foo=objectA.bar))
except ...:
  ...
 ...

result = MyOtherMdel.objects.filter(reduce(operator.or_, qList),
  **other_filter_conditions)
0 голосов
/ 17 марта 2011

Для Querysets существует метод none (), который всегда возвращает EmptyQueryset.Есть ли что-то похожее для объектов Q?

Q (pk = -1)

...