Django - выпадающий список (виджет выбора) в форме не сохраняет данные в бд

Я использую эту форму для получения выпадающего меню в моей html-форме :

forms.py

class forms_bdc(forms.ModelForm):

    [...]
    bdc_description_1 = forms.ModelChoiceField(required=False,queryset=models_products.objects.values_list('product_denomination', flat=True), widget=forms.Select(attrs={'id': 'editable-select-2','onchange': 'populate_selected_product(this.id)'}),empty_label=None )

models.py

class models_bdc(models.Model):

    [...]
    bdc_description_1 = models.CharField(max_length=50)

Но когда я сохраняю/отправляю форму, данные не сохраняются в базу данных.

Если я убираю виджет выбора в обычный forms.charfield, данные сохраняются корректно.

Так что я предполагаю, что ошибка кроется в файле forms.py, но не могу понять, где именно.

Спасибо

Короткий ответ:

# forms.py

class forms_bdc(forms.ModelForm):
        # ...

        bdc_description_1 = forms.ChoiceField(
            required=True,
            choices=(
                ('option value', 'option label'),
            ),
            widget=forms.Select(attrs={'class': 'your-class'}),
            # ...
        )

Длинный ответ:

Совет: для форм django используйте PascalCase и заканчивайте имя "Form" (соглашение).

#forms.py

from .models import OPTIONS

class BdcForm(forms.ModelForm): 
        # ...

        bdc_description_1 = forms.ChoiceField(
            required=True,
            choices=OPTIONS,
            widget=forms.Select(attrs={'class': 'your-class'}),
            # ...
        )
# models.py

OPTIONS = (
   ('option value', 'option label'),
   # ...
)

Вы можете задать ожидаемые значения в моделях и просто импортировать их и повторно использовать где угодно.

Я нашел его благодаря подсказке Антонио Фернандеша.

Вот что я сделал:

models.py

class models_bdc(models.Model):

    [...]
    bdc_description_1 = models.CharField(max_length=50)

forms.py

class forms_bdc(forms.ModelForm):


[...]
bdc_description_1 = forms.ChoiceField(
        required=False,
        choices=list(models_products.objects.values_list( 'id','product_denomination')),
        widget=forms.Select(attrs={'id': 'editable-select-2','onchange': 'populate_selected_product(this.id,this.value)'}),

    )
Вернуться на верх