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)'}),
)