Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Django:从值创建一个更简单的列表_Python_Django - Fatal编程技术网

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))