如何将批量参数分配给 Django 对象值列表?

How to assign bulk parameter to Django object values list?

如何将批量参数分配给 Django 对象值列表?

  1. 批量参数赋值
strlist = ["a","b","c"]
model1. objects.filter(**kwargs).values_list(strlist)

结果:

TypeError: unhashable type: 'list'
  1. 手动分配
model1. objects.filter(**kwargs).values_list("a","b","c")

结果没问题

如何批量参数赋值?

简答:
尝试:

model1. objects.filter(**kwargs).values_list(*strlist)

解释:
问题是该函数要求您输入未压缩的值。 list*list 是有区别的。 *list 表示将列表中的各个值拆包,然后输入它们。
所以,

model1. objects.filter(**kwargs).values_list(strlist)

被解释为

model1. objects.filter(**kwargs).values_list(["a", "b", "c"])

但是

model1. objects.filter(**kwargs).values_list(*strlist)

被解释为

model1. objects.filter(**kwargs).values_list("a", "b", "c")

示例 1:

a = [1,2,3,4]
print(a)
print(*a)

输出:

[1, 2, 3, 4]
1 2 3 4

因此,虽然 a 表示列表 a 但在列表形式中,*a 表示列表 a 作为其单个元素。因此,即使您尝试索引 *a,它也会显示错误。
另一方面,**dict1 指的是字典 dict1 的参数为 key-value 对的情况。例如:

def b(hel, lo, wo, rl):
    print(hel, lo, wo, rl)

a = [1,2,3,4]
d = {'hel':1, 'lo':2, 'rl':3, 'wo':4}
b(*a)
b(**d)

输出:

1 2 3 4
1 2 4 3