Django ORM中有没有更简洁的过滤器链式调用方法?

1 投票
3 回答
502 浏览
提问于 2025-04-16 16:29

我一直在这样做:

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)

撰写回答