【问题标题】:Django filter for ANY value in a MySql columnDjango 筛选 MySql 列中的任何值
【发布时间】:2020-10-07 17:17:54
【问题描述】:

我希望能够将此过滤器用于“特定”或“空”或“任何值”场景

#  3 scenarios for the third field : Col3 

#  Query for a specific value
sample = table.objects.filter(Col1=343, Col2=545, Col3=656)

#  Query for NULL value
sample = table.objects.filter(Col1=343, Col2=545, Col3=None)

#  Query for any value
sample = table.objects.filter(Col1=343, Col2=545, Col3=???)

特定和 NULL 场景由 Python 中的 656 和“无”等精确值处理。 我们如何处理来自上面的任何价值场景?

想象一下我们可以查询数据库的 3 个下拉框。

我的问题与这个类似,但特定于 Django

原始 sql 特定问题在这里:How do you query an int column for any value?,在我的情况下,coloumn 可以是任何类型

生成的查询可能如下所示:

// Query for a specific value
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3=656       
// Query for NULL value
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3 IS NULL
// Query for any value
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3=*    

【问题讨论】:

标签: python django django-models


【解决方案1】:

您可以使用以下语句:

# Query for any value
sample = table.objects.filter(Col1=343, Col2=545, Col3__regex = r'.')

【讨论】:

    【解决方案2】:

    我认为您应该可以像这样省略Col3 过滤器:

    sample = table.objects.filter(Col1=343, Col2=545)
    

    编辑:您是否试图将所有这些情况浓缩为一个陈述?

    我对 Django 中 QuerySets 的微妙之处还不够熟悉,无法为您提供单线,但是,让您的 3 个下拉框示例更进一步……如果您的下拉列表包含“无”和“任何”怎么办?除了常规的值列表之外?这样您就可以根据提供的参数选择查询。

    if param3 == 'None':
        sample = table.objects.filter(Col1=343, Col2=545, Col3=None)
    elif param3 == 'Any':
        sample = table.objects.filter(Col1=343, Col2=545)
    else:
        sample = table.objects.filter(Col1=343, Col2=545, Col3=param3)
    

    【讨论】:

    • @user1035818:我已经编辑了我的答案 - 它应该可以解决问题,直到有更多 Django 经验的人可以帮助你。
    • 我已经这样做了,但必须有一些更好的方法来浓缩它。我有 5 列我想在上面应用这些案例,所以浓缩它使它变得非常整洁,而不是去寻找一个大的 if-else 块。感谢你的帮助。 :)
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多