【问题标题】:Queryset filters: Q objects and filters auto generation (Django)查询集过滤器:Q 对象和过滤器自动生成 (Django)
【发布时间】:2018-12-19 22:15:13
【问题描述】:

例如我有一个生成过滤器参数的函数:

def get_filters_parameters(name=None, mother_age=None, surname_not=None):
    filters = {}
    if name:
        filters['name'] = name
    if mother_age:
        filters['mother__age'] = mother_age
    # if surname_not:
    #     here we need `~Q(surname = surname_not)` expression
    return **filters

my_filters = get_filters_parameters(name='ululu')
qs = MyModel.objects.filter(**my_filters)

我需要在 surname_not 字段的过滤器参数中使用 Q 对象。
有谁知道我该怎么做?

【问题讨论】:

    标签: django django-queryset django-q


    【解决方案1】:

    你可以坚持使用 Q。

    def get_filters_parameters(name=None, mother_age=None, surname_not=None):
        filters = Q() 
        if name:
            filters &= Q(name=name) 
        if mother_age:
            filters &= Q(mother__age=mother_age) 
        if surname_not:
            filters &= ~Q(surname=surname_not)
        return filters
    
    my_filters = get_filters_parameters(name='ululu')
    qs = MyModel.objects.filter(my_filters)
    

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2010-12-31
      • 2010-12-31
      • 2010-10-14
      相关资源
      最近更新 更多