有没有更简洁的方法来链接过滤器与Django ORM?

时间:2011-04-27 01:56:00

标签: python django django-models

我一直这样做:

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

但我讨厌\。有更清洁的风格吗?

3 个答案:

答案 0 :(得分:5)

或者,你可以利用Django QuerySet操作是累积的,懒惰的事实:

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

答案 1 :(得分:4)

Parens会阻止Python在关闭之前将其分解。

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

答案 2 :(得分:4)

就像伊格纳西奥说的那样,但你也可以关闭下一行的parens,而不是把整个事情包起来。

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