Поле со списком в форме для текстового поля в модели

828 0

Бывают случаи что на этапе инициализации моделей нет возможности сформировать список для полей с выбором (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),
            ...
        }

Комментарии

Контактные данные

 Россия, г. Москва