django queryset api - 使用带有字段列表的values方法

时间:2018-03-28 14:23:57

标签: python django django-queryset

我想查询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'。我怎么能解决这个问题?

2 个答案:

答案 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'}]>