Django自定义查询集过滤器

时间:2009-03-23 03:53:42

标签: python django django-queryset generator-expression

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

正如我可以写的那样

MyClass.objects.all().filter(field=val)

我想做这样的事情:

MyClass.objects.all().filter(customFilter)

我可以使用生成器表达式

(x for x in MyClass.objects.all() if customFilter(x))

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

2 个答案:

答案 0 :(得分:14)

开始使用管理员方法的建议很好,但要更直接地回答您的问题:是的,请使用Q objects。例如:

from django.db.models import Q

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

MyModel.objects.filter(complexQuery)

Q对象可以与|结合使用(或),& (AND)和〜(NOT)。

答案 1 :(得分:5)

我认为您可能需要自定义managers