Есть ли более чистый способ цепочки фильтров с Django ORM? - PullRequest
1 голос
/ 27 апреля 2011

Я делал это:

Model.objects.filter(key1=value1)\
             .exclude(key2=value2)\
             .order_by('key3')\
             .select_related(depth=1)

но я ненавижу \. Есть ли стиль чище?

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Или вы можете воспользоваться тем, что операции Django QuerySet являются кумулятивными и ленивыми:

 myobjects = Model.objects.filter(key1=value1)
 myobjects = myobjects.exclude(key2=value2)
 myobjects = myobjects.order_by('key3')
 myobjects = myobjects.select_related(depth=1)
4 голосов
/ 27 апреля 2011

Как сказал Игнасио, но вы также можете закрыть парены в следующей строке вместо того, чтобы обернуть все это.

Model.objects.filter(key1=value1
              ).exclude(key2=value2
              ).order_by('key3'
              ).select_related(depth=1)
4 голосов
/ 27 апреля 2011

Паренс не даст Python разбить его, пока он не закроется.

(
  Model.objects.filter(key1=value1)
               .exclude(key2=value2)
               .order_by('key3')
               .select_related(depth=1)
)
...