如何在Django QuerySet的values_list()中使用动态字段列表?
解决Django QuerySet中动态列表传入values_list()的问题
嘿,刚接触Python和Django的时候遇到这个问题太正常了!我来给你捋清楚怎么搞定~
你遇到的核心问题是:values_list() 方法需要的是多个位置参数(比如 values_list('field1', 'field2')),但你直接传入了一个列表对象,这就导致Django把整个列表当成了单个参数处理,自然会出错。
正确的解决方法:使用Python的解包操作符 *
Python的*操作符可以把列表里的元素逐个拆解出来,作为单独的参数传递给函数。放在你的场景里,只需要把代码改成这样:
fieldList = ['field1', 'field2'] obj = sampletable.objects.filter(somecondition).values_list(*fieldList)
这样写之后,*fieldList就会把列表里的'field1'和'field2'分别传递给values_list(),效果完全等同于手动写values_list('field1', 'field2')。
额外小提示
如果之后你需要返回字典形式的查询结果(而不是元组),可以用values()方法,同样能用*解包你的动态字段列表:
obj = sampletable.objects.filter(somecondition).values(*fieldList)
另外,如果你的fieldList有可能是空列表,建议提前做个判断(比如设置默认字段),避免调用values_list()时传入空参数导致报错。
内容的提问来源于stack exchange,提问作者Ashwin Kanna
相关产品推荐
相关产品推荐

