Я хотел бы заполнить раскрывающийся список форм данными из базы данных.
Эти данные поступают не из модели, а из необработанного запроса.
Это работает, когда база данных доступна и миграции уже созданы. В противном случае генерирование миграций (python manage.py makemigrations myapp
) завершится неудачно, потому что Django оценивает _all_departments()
, который не может найти соответствующую таблицу.
def _all_departments() -> List[Tuple[str, str]]:
from django.db import connection
with connection.cursor() as cursor:
cursor.execute("select distinct department from crm_mytable order by department")
return [(row[0], row[0]) for row in cursor.fetchall()]
class MyForm(forms.Form):
department = forms.CharField(
widget=forms.SelectMultiple(choices=_all_departments()))
Я наивно пытался обновить варианты вручную на __init__
безуспешно (варианты всегда пусты):
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['department'].widget.choices = _all_departments()
department = forms.CharField(
widget=forms.SelectMultiple(choices=[]))
Каким образом можно правильно заполнить выбор по требованию?