Django ORM中有没有更简洁的过滤器链式调用方法?
我一直在这样做:
Model.objects.filter(key1=value1)\
.exclude(key2=value2)\
.order_by('key3')\
.select_related(depth=1)
但是我讨厌这个\
。有没有更简洁的写法?
3 个回答
4
就像Ignacio说的那样,你也可以在下一行结束括号,而不是把整个内容都包起来。
Model.objects.filter(key1=value1
).exclude(key2=value2
).order_by('key3'
).select_related(depth=1)
4
括号会让Python在没有关闭之前,不会把内容分开。
(
Model.objects.filter(key1=value1)
.exclude(key2=value2)
.order_by('key3')
.select_related(depth=1)
)
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)