Как построить переменную массива кортежей целых чисел + строк в python для l oop? - PullRequest
0 голосов
/ 05 мая 2020

Созданная вручную переменная STAFFLIST работает в базе данных django как список вариантов, перечисленных как PositiveSmallIntegerField.

STAFF1 = 1
STAFF2 = 2
STAFF3 = 3
STAFFLIST = (
    (STAFF1, _('John Doe')),
    (STAFF2, _('Lisa Beauty')),
    (STAFF3, _('Harry Potter')),
)

Печать для этой переменной работает следующим образом:

>>>print(STAFFLIST[1])
(2, 'Lisa Beauty')
>>> print(STAFFLIST[1][0])
2
>>> print(STAFFLIST[1][1])
Lisa Beauty
>>>

Как сделать автоматически встроил эту переменную для l oop на основе фактического списка сотрудников? Я пробовал что-то вроде ниже, но безуспешно:

from django.contrib.auth.models import User
from django.utils.translation import gettext as _

staff = User.objects.filter(is_staff=True)
idx=0
for stf in staff:
    STAFFLIST[idx] = (stf.id, _(stf.first_name + ' ' + stf.last_name))
    idx=idx+1

Я получаю сообщение об ошибке:

TypeError: 'str' object does not support item assignment

Я считаю, что моя проблема - низкий уровень знаний python типов данных. И в настоящее время я пытаюсь работать с типом данных кортежа и хранить строку внутри.

1 Ответ

0 голосов
/ 05 мая 2020

Я решил проблему l oop. Следующий код работает и строит тот же массив кортежей, что и переменная, определенная вручную:

from django.contrib.auth.models import User
from django.utils.translation import gettext as _

staff = User.objects.filter(is_staff=True)
idx=0
for stf in staff:
    if idx == 0:
        STAFFLIST = ((stf.id, _(stf.first_name + ' ' + stf.last_name)),)
        idx=1
    else:
        STAFFLIST = STAFFLIST + ((stf.id, _(stf.first_name + ' ' + stf.last_name)),)
...