9

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

就像我能写的一样

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

我想做这样的事情:

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

我可以使用生成器表达式

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

但这会失去可链接性和 QuerySet 提供的任何其他功能。

4

2 回答 2

15

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

from django.db.models import Q

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

MyModel.objects.filter(complexQuery)

Q 对象可以与 | (OR)、& (AND) 和 ~ (NOT)。

于 2009-03-23T12:21:14.913 回答
7

我认为您可能需要自定义管理器

于 2009-03-23T03:58:12.097 回答