Python/Django:从值创建一个更简单的列表
考虑:Python/Django:从值创建一个更简单的列表,python,django,Python,Django,考虑: >>>jr.operators.values_list('id') [(1,), (2,), (3,)] 如何进一步简化为: ['1', '2', '3'] 目的: class ActivityForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(ActivityForm, self).__init__(*args, **kwargs) if sel
>>>jr.operators.values_list('id')
[(1,), (2,), (3,)]
如何进一步简化为:
['1', '2', '3']
目的:
class ActivityForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ActivityForm, self).__init__(*args, **kwargs)
if self.initial['job_record']:
jr = JobRecord.objects.get(pk=self.initial['job_record'])
# Operators
self.fields['operators'].queryset = jr.operators
# select all operators by default
self.initial['operators'] = jr.operators.values_list('id') # refined as above.
您可以使用列表: >>> mylist = [(1,), (2,), (3,)] >>> [str(x[0]) for x in mylist] ['1', '2', '3'] >>>mylist=[(1,),(2,),(3,)] >>>[str(x[0])表示mylist中的x] ['1', '2', '3'] 像这样的
x = [(1,), (2,), (3,)]
y = [str(i[0]) for i in x]
['1', '2', '3']
使用django查询集的
flat=True
构造:
根据文档中的示例:
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
您需要执行..以获取此输出['1','2','3']
map(str,Entry.objects.values\u list('id',flat=True).order\u by('id'))
这是django中可用API的重新实现,比django生成的SQL查询要慢得多。此解决方案返回整数列表。要按照OP的要求获得字符串列表,如['1','2','3']
,您需要执行映射(str,Entry.objects.values\u list('id',flat=True)。order\u by('id'))
根据OP的问题,当您只有一个值时,此操作有效。对于多个值,您可以使用list(queryset.iterator())
我可以获得多个值,如Entry.objects.values\u list('id','name',flat=True),但flat=True仅适用于单个值,而不适用于多个值。如何克服这个问题?我只能使用list(Entry.objects.values\u list('id',flat=True))