我想查询Django模型,但我不知道要提前检索的字段。如果我碰巧知道他们和他们的号码,我会做的
MyModel.objects.values('field1', 'field2')
实际上,我注意到values
方法采用API reference中指定的可选位置参数*字段。
因此,我考虑创建一个函数,它接受*fields
个参数,然后使用这样的参数进行查询。包装器看起来像这样:
def get_values(self, *fields):
return MyModel.objects.values(fields)
但是,由于QuerySet API不喜欢我的元组,因此我得到AttributeError: 'tuple' object has no attribute 'split'
。我怎么能解决这个问题?
答案 0 :(得分:2)
您需要解压缩值:)
def get_values(self, *fields):
return MyModel.objects.values(*fields) # note the *
否则就像你写的那样
def get_values(self, *fields):
return MyModel.objects.values(('field1', 'field2')) # note the extra ()
...因此AttributeError: 'tuple' object has no attribute 'split'
因为元组没有split
方法!
答案 1 :(得分:2)
您可以使用python 解压缩功能:
*
运算符可用于发送params列表作为位置参数:
>>> fields = ['field1', 'fields2']
>>> MyModel.objects.values(*fields)
<MyModelQueryset [{'field1': 'foo1', 'field2': 'bar2'}, {'field1': 'foo1', 'field2': 'bar2'}, {'field1': 'foo1', 'field2': 'bar2'}]>