Django:values\u list(flat=True),但用于多个字段

Django:values\u list(flat=True),但用于多个字段,django,django-queryset,Django,Django Queryset,我有一个模型,TestModel 据我所知,如果我要实施 TestModel.objects.values\u list('FieldA',flat=True) 这导致 [A,B,C,(…)](列表) 这样做TestModel.objects.values\u list('FieldA','FieldB') 结果在[(A,1),(B,2),(C,3),(…)](查询集列表) 但是对于多个字段,是否可能得到与Flat=True类似的结果?所以,如果我用像 testQS=TestModel.obje

我有一个模型,
TestModel

据我所知,如果我要实施

TestModel.objects.values\u list('FieldA',flat=True)

这导致
[A,B,C,(…)]
(列表)

这样做
TestModel.objects.values\u list('FieldA','FieldB')

结果在
[(A,1),(B,2),(C,3),(…)]
(查询集列表)

但是对于多个字段,是否可能得到与
Flat=True
类似的结果?所以,如果我用像

testQS=TestModel.objects.values\u列表('FieldA','FieldB')

并调用
testQS['FieldA']
,这将返回
[A,B,C,(…)]

同样,调用
testQS['FieldB']
将返回
[1,2,3,(…)]

基本上,我希望从
values\u列表
中的某个字段中获取多个字段的所有数据,而不必求助于
for loop

或者为每个字段多次创建
值列表。

您可以使用以下方法:

fields = ['FieldA','FieldB']
testQS = list(TestModel.objects.values_list(*fields))
result = {field:[] for field in fields}
counter = 0
for item in testQS:
    result = {field:[*result[field],item[counter]] for field in fields}
    counter +=1

您可以使用itertools链方法。这会使你的名单变得平坦

导入itertools
qs=TestModel.objects.values\u列表('FieldA','FieldB'))
qs=列表(itertools.chain(*qs))
返回qs

对于多个字段,不能使用
falt=True
调用
values\u list()
。是的,我知道。我认为你没有正确理解这个问题。我没有提到也没有暗示我在带有多个字段的
值列表中使用了
flat=True
;我知道这是错误的。我想知道的是,我重申,使用多个字段,使用
flat=True
是否有可能得到类似的结果。我要寻找的关键思想是,不使用
for
循环。。。。