如何从Django QuerySet提取值,生成普通字符串列表?
解决方法
问题核心是你直接把Django的QuerySet对象添加到了列表里:values_list("x", flat=True)返回的不是普通Python列表,而是一个QuerySet实例,用append()会把整个QuerySet作为列表的单个元素,所以才会出现包含QuerySet对象的结果。
下面两种方法可以快速解决:
方法1:将QuerySet转为普通列表后合并
把QuerySet转成Python原生列表,再合并到目标列表中:
x_list = [] x = SupplierCommunication.objects.filter(supplier=supplier.id).values_list("x", flat=True) x_list.extend(list(x)) # 也可以用 x_list += list(x)
如果只需要单次查询直接得到目标列表,更简洁的写法:
x_list = list(SupplierCommunication.objects.filter(supplier=supplier.id).values_list("x", flat=True))
方法2:用extend()替代append()
append()是添加单个元素,而extend()会遍历可迭代对象(比如QuerySet),把每个元素逐个加入列表:
x_list = [] x = SupplierCommunication.objects.filter(supplier=supplier.id).values_list("x", flat=True) x_list.extend(x)
如果你的代码是在循环中多次执行(比如处理多个供应商),每次用extend()代替append(),就能把所有QuerySet中的元素合并成一个普通列表,得到你期望的['no','yes']结果。
内容的提问来源于stack exchange,提问作者Didem Durukan
相关产品推荐
相关产品推荐

