在Django中,是否有为QuerySet编写复杂的自定义过滤器的标准方法?
正如我可以写的那样
MyClass.objects.all().filter(field=val)
我想做这样的事情:
MyClass.objects.all().filter(customFilter)
我可以使用生成器表达式
(x for x in MyClass.objects.all() if customFilter(x))
但这会失去可链接性以及QuerySets提供的任何其他功能.
开始使用管理器方法的建议很好,但更直接地回答您的问题:是的,使用Q对象.例如:
from django.db.models import Q complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000) MyModel.objects.filter(complexQuery)
Q对象可以与|组合 (OR),&(AND)和〜(NOT).
我想你可能需要定制经理.