代码之家  ›  专栏  ›  技术社区  ›  ncopiy

queryset过滤器:q对象和过滤器自动生成(django)

  •  0
  • ncopiy  · 技术社区  · 6 年前

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

    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)
    

    我需要在过滤器参数中使用q对象 surname_not 字段。
    有人知道我怎么做吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Alexandr Tatarinov    6 年前

    你可以坚持使用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)