假设我有以下问题:
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
与变量而不是字段名称一起使用。
非常感谢任何帮助。
答案 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)
长话短说,你不能这样做。
查询集仅限于模型字段,这是您所说的列名。实际上,它们只在数据库层中运行,而您的变量不存在。
您必须遵循另一种过滤方法才能包含变量。