Бывают случаи что на этапе инициализации моделей нет возможности сформировать список для полей с выбором (choices).
В таком случае этот момент можно решить созданием в модели обычного текстового поля, а само поле выбора (select) реализовать в модельной форме с помощью виджета.
---
Примерный код:
# Модель class MyModel(models.Model): ... my_field =models.CharField(
max_length=20,
verbose_name='Поле с выбором в форме'
)
# Функция для наполнения списка для выбора def get_choices(): # Какой-то код наполняющий варианты выбора с ключами # вида [(ключ, описание), ...] choices = [(val_{idx}, description_{idx}) for idx in range(10)] return choices # Модельная форма class MyForm(forms.ModelForm): ... class Meta(object): model = MyModel fields = ['my_field', ...] my_choices = get_choices() widgets = { 'my_field': forms.Select(attrs={'class': 'form-control'}, choices=wtm_algo_choices), ... }
Комментарии