Django自定义查询集过滤器

int*_*tar 7 python django generator-expression django-queryset

在Django中,是否有为QuerySet编写复杂的自定义过滤器的标准方法?

正如我可以写的那样

MyClass.objects.all().filter(field=val)
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

MyClass.objects.all().filter(customFilter)
Run Code Online (Sandbox Code Playgroud)

我可以使用生成器表达式

(x for x in MyClass.objects.all() if customFilter(x))
Run Code Online (Sandbox Code Playgroud)

但这会失去可链接性以及QuerySets提供的任何其他功能.

Car*_*yer 14

开始使用管理器方法的建议很好,但更直接地回答您的问题:是的,使用Q对象.例如:

from django.db.models import Q

complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)

MyModel.objects.filter(complexQuery)
Run Code Online (Sandbox Code Playgroud)

Q对象可以与|组合 (OR),&(AND)和〜(NOT).


Vas*_*sil 6

我想你可能需要定制经理.