Python/Django:从values_list()创建一个更简单的列表

Ant*_*mon 25 python django

考虑:

>>>jr.operators.values_list('id')
[(1,), (2,), (3,)]
Run Code Online (Sandbox Code Playgroud)

如何进一步简化:

['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)

目的:

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.
Run Code Online (Sandbox Code Playgroud)

Jar*_*die 71

使用flat=Truedjango queryset 的构造:https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values_list

从文档中的示例:

>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案返回整数列表.要获得像OP一样的字符串列表,如'['1','2','3'],你需要做`map(str,Entry.objects.values_list('id',flat = True) .order_by( 'ID'))` (7认同)