【问题标题】:Django Custom Queryset filtersDjango 自定义查询集过滤器
【发布时间】:2010-10-14 21:42:16
【问题描述】:

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

就像我会写的一样

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

我想做这样的事情:

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

我可以使用生成器表达式

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

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

【问题讨论】:

    标签: python django django-queryset generator-expression


    【解决方案1】:

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

    from django.db.models import Q
    
    complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)
    
    MyModel.objects.filter(complexQuery)
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我想我确实需要这个。但与动态传递过滤器函数相比,它看起来非常复杂。
      • 这不是很复杂,制作自定义管理器是一个很好的做法,特别是如果您计划从 db 等缓存内容。
      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 2018-09-29
      • 2016-06-12
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2021-03-23
      相关资源
      最近更新 更多