Виджет класса формы Django с выпадающим списком, заполняемым из базы данных
Я использую Django 3.2 и пытаюсь создать класс формы, поле которой (категория) заполняется из модели базы данных.
Вот фрагмент класса моей формы:
class ArticleForm(forms.ModelForm):
# ...
class Meta:
model = Article
fields = ['title', 'teaser', 'category', 'guest_author','content', 'tags', 'is_published']
categories = [] #forms.ModelChoiceField(queryset=ArticleCategory.objects.all().order_by('name'))
widgets = {
'guest_author': forms.TextInput(attrs={'class': 'form-control input'}),
'title': forms.TextInput(attrs={'class': 'form-control input'}),
'teaser': forms.Textarea(attrs={'class': 'form-control input'}),
'category': forms.Select(choices=categories, attrs={'class': 'form-control input'}),
'content': forms.Textarea(attrs={'class': 'form-control input'}),
'tags': forms.TextInput(attrs={'class': 'form-control input'}),
'is_published': forms.CheckboxInput(attrs={'class': 'form-control-input'})
}
Я обнаружил, что если я создам поле как атрибут экземпляра следующим образом:
category = forms.ModelChoiceField(queryset=ArticleCategory.objects.all().order_by('name'))
>
Тогда я могу использовать форму (без возникновения ошибок). Но я хочу иметь возможность указать виджет, который будет использоваться для этого поля, используя приведенное выше объявление - есть ли способ сделать это - или я ограничен простым объявлением поля как переменной экземпляра формы?
Поля формы могут принимать необязательный аргумент widget
при их определении, поэтому вы должны быть в состоянии сделать что-то вроде этого:
category = forms.ModelChoiceField(queryset=ArticleCategory.objects.all().order_by('name'),
widget= the widget you want to use)