【问题标题】:Using a string as the argument to a Django filter query使用字符串作为 Django 过滤器查询的参数
【发布时间】:2011-05-16 17:40:43
【问题描述】:

我正在尝试进行 django 查询,但可能有几个不同的 WHERE 参数。所以我正在考虑做类似的事情:

querystring = "subcat__id__in=[1,3,5]"
Listing.objects.filter(querystring)

这里的清单是在我的模型中定义的,它包含多对多字段subcat。但是,这会引发ValueError,因为过滤器不接受字符串作为其参数。 Python中有没有办法将字符串评估为它的内容而不是字符串?类似于 print 语句,它内联打印字符串的值而不是标准输出。

顺便说一下,我不只是这样做的原因

querystring = [1,3,5]
Listing.objects.filter(subcat__id__in=querystring)

是我并不总是过滤subcat__id,有时它是一个或几个其他参数,我宁愿不必写出一堆由 if 语句控制的单独查询。非常感谢任何建议。

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    也许……

    filter_dict = {'subcat__id__in': [1,3,5]}
    Listing.objects.filter(**filter_dict)
    

    【讨论】:

    • 完美,这正是我想要的!非常感谢。
    • @danny 那么接受答案了吗? =P
    • 是否可以使用或使用这种模式。例如Q(subcat__id__in =[1,3,5]) | Q(cat__id=9)?
    【解决方案2】:
    Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多