【问题标题】:Django: Prepare multiple SQL condition with whereDjango:使用 where 准备多个 SQL 条件
【发布时间】:2014-10-06 06:48:56
【问题描述】:

我有 POST 数据:

filter[param1][type]:text
filter[param1][range]:null
filter[param1][suffix]:
filter[param1][prefix]:
filter[param1][v][text]:33
filter[param1][v][type]:has
filter[param2][type]:text
filter[param2][range]:null
filter[param2][suffix]:
filter[param2][prefix]:
filter[param2][v][text]:make
filter[param2][v][type]:has
...

在我看来,这是 POST 请求的处理程序: filter = (request.POST.get('filter', False))

if (filter is not False):
    filter_obj = json.loads(filter)
    for key, value in filter_obj.items():
        if value.get('v') is not None:
            filters[key] = value.get('v').get('text')

需要准备多个 SQL 条件,其中:

WHERE (
    param1 = 33 AND 
    param2 = make AND
    ...
)

我如何在 Django 中做到这一点?

【问题讨论】:

  • 你有没有在网上查过如何编写 Django where 子句?那里有很多 :) 你尝试了什么?
  • 是的。我发现条件如下: conditions['table_name'] = 'Q( row_name = param_text )' 但我不能将它与动态数据一起使用
  • 你的意思是动态的,你的数据来自一个post http请求?你的动态数据在filter[param1]filter[param2] 中吗?您能否提供有关您的数据的更多详细信息?
  • 我想获得原始文本解决方案,因为我计划使用 alias_name 到表格。
  • 所以您有兴趣使用Raw SQL query 而不是 Django Query 搜索器?

标签: python sql django


【解决方案1】:

丑事就是这样发生的! ......... 像Ur这样的图像情况......你知道丑陋的条件

if len(request.POST.get("name"))>1:
    Object.objects.filter(name =request.POST.get("name"))
if len(request.POST.get("name"))>1 and len(request.POST.get("id"))>1:
    Object.objects.filter(name =request.POST.get("name"), id = request.POST.get("id"))

捷径或答案:

kwargs = {}
if len(request.POST.get("name"))>1:
    kwargs['name']=request.POST.get("name")
if len(request.POST.get("id"))>1:
    kwargs['id']=request.POST.get("id")
result = Object.objects.filter(**kwargs)

但回答为时已晚。对不起

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2013-12-31
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2017-12-02
    • 2014-05-17
    相关资源
    最近更新 更多