【问题标题】:Adding Extra Parameters to a Objects.filter (via Dict)?向 Objects.filter 添加额外参数(通过字典)?
【发布时间】:2010-12-18 07:43:52
【问题描述】:

假设我们有一个dvd 表,我们要在其中搜索price=14.99rating=18。我们可以这样做:

#Making some dictionary
dict1 = {}

#Adding some stuff
dict1['price']=14.99
dict1['rating']18

#Use dict as filter
dvd.objects.filter(**dict1)

有没有办法添加额外的参数,例如:

dvd.objects.filter(title__icontains='the')

我只想为用户增加一点灵活性,因为目前他们可以选择他们想要搜索的字段并准确指定他们想要的内容。但是我想搜索部分匹配,就像__icontains 所做的那样。我也想要__gt__lt

这可能吗?

【问题讨论】:

    标签: django filter


    【解决方案1】:

    代替:

    dict['price'] = 14.99
    

    你可以这样做:

    dict['price__gte'] = 10
    dict['price__lte'] = 15
    

    当您使用 **kwargs 时,以下内容相同:

    Model.objects.filter(price__gte=10, price__lte=15)
    # or
    kwargs = {'price__gte': 10,
              'price__lte': 15}      
    Model.objects.filter(**kwargs)
    

    【讨论】:

      【解决方案2】:

      我不确定你想做什么?是否要在初始 dvd.objects.filter(**dict1)? 之后过滤其他字段?如果是这样,您可以这样做:

      qs = dvd.objects.filter(**dict1)
      qs.filter(title__icontains='the')
      

      请记住,filter 返回一个查询集,因此您可以执行任何您想要的操作,就像在 dvd.objects 上一样。

      如果您的意思是要将icontains 添加到dict 中的某些内容,那么您可以简单地将dict1 中的键分配为price__icontains 而不是price

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多