Django 自定义查询集过滤器

发布于 2024-07-15 07:11:56 字数 360 浏览 10 评论 0原文

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

正如我可以写的那样,

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

我想做这样的事情:

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

我可以使用生成器表达式

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

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

Is there, in Django, a standard way to write complex, custom filters for QuerySets?

Just as I can write

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

I'd like to do something like this :

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

I could use a generator expression

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

but that would lose the chainability and whatever other functions the QuerySets provide.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

落在眉间の轻吻 2024-07-22 07:11:56

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

from django.db.models import Q

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

MyModel.objects.filter(complexQuery)

Q 对象可以与 | 组合 (或),& (和),和〜(非)。

The recommendation to start using manager methods is a good one, but to answer your question more directly: yes, use Q objects. For example:

from django.db.models import Q

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

MyModel.objects.filter(complexQuery)

Q objects can be combined with | (OR), & (AND), and ~ (NOT).

毁梦 2024-07-22 07:11:56

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

I think you may need custom managers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文