在Django查询比较中使用变量而不是字段名称

时间:2017-06-25 20:38:05

标签: django

假设我有以下问题:

query_result = Mymodel.objects.values('price').filter(price__gte=0)

如果我想概括查询并将其放入函数中,我可以用变量替换'price'

def price_query(column_name):
    query_result = Mymodel.objects.values(column_name).filter(column_name__gte=0)
    return query_result 

price_query('price')

'price'column_name的第一次替换正常,但如何将比较__gte与变量而不是字段名称一起使用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

您可以解压缩字典以提供关键字参数:

def price_query(column_name):
    filter_kwargs = {
        "{}__gte".format(column_name): 0
    }
    query_result = Mymodel.objects.values(column_name).filter(**filter_kwargs)
return query_result

答案 1 :(得分:1)

长话短说,你不能这样做。

查询集仅限于模型字段,这是您所说的列名。实际上,它们只在数据库层中运行,而您的变量不存在。

您必须遵循另一种过滤方法才能包含变量。