【问题标题】:injecting code inside of code python django and q objects在代码python django和q对象中注入代码
【发布时间】:2018-09-14 07:52:03
【问题描述】:

这个问题让我接近我想做的事情,但我仍然需要进一步理解。 Django. Q objects dynamicaly generate

我在 django 中有一个视图,可以查看是否有任何查询参数已发送到 url。我期待一些查询对象具有多个值。 IE。 domain.com/?neighborhood=Logan Square&neighborhood=River North

我抓取查询参数并将它们放在一个列表中。我现在正在尝试遍历该列表并使用或逻辑过滤查询参数。 https://docs.djangoproject.com/en/1.11/topics/db/queries/#complex-lookups-with-q

为此,我知道我需要使用 Q 对象。

正确的代码是:

Q(neighborhood='洛根广场') | Q(neighborhood='River North')

所以我需要做的是 1 动态添加查询 Q 对象,然后还添加 |为 for 循环中的所有对象动态操作。

【问题讨论】:

    标签: python django orm


    【解决方案1】:

    你根本不需要这个。你可以简单地使用__in:

    MyModel.objects.filter(neighborhood__in=request.GET.getlist('neighborhood'))
    

    【讨论】:

    • 很好,我已经在一个变量中有 getlist,所以现在我只需要将变量名称设置为具有邻域列表的变量!太棒了。谢谢。
    【解决方案2】:

    如果我正确理解了您的问题。
    “您可能会或可能不会获得查询参数。”?

    query = ModelName.objects.none()          # setting a Q() instance (maybe skippable)
    for a_item in neighbourhood_list:
        query |= (Q(neighborhood = a_item))
    
    query = ModelName.objects.filter(query)
    

    您可能需要对其进行测试,并对其进行一些编辑,但会达到您想要的效果。

    【讨论】:

      猜你喜欢
      • 2022-09-26
      • 1970-01-01
      • 2023-03-26
      • 2021-07-04
      • 2013-06-17
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多