django - ModelChoiceField 小部件属性无效
问题描述
我有这个模型表单,我必须手动渲染,但 ModelChoiceField 属性没有任何效果。
class ExtendedUserForm(forms.ModelForm):
favourite_provider = forms.ModelChoiceField(queryset=Provider.objects.all())
class Meta:
EXPERTISE_CHOICES = (
('N', 'Novice'),
('B', 'Beginner'),
('I', 'Intermediate'),
('E', 'Expert'),
)
model = ExtendedUser
labels = {
'expertise': 'Expertise',
'favourite_provider': 'Favourite provider',
'job_title': 'Job title',
'job_place': 'Company/Institution',
}
widgets = {
'expertise': forms.Select(choices=EXPERTISE_CHOICES, attrs={'class': 'form-control'}),
'favourite_provider': forms.Select(attrs={'class': 'form-control'}),
'job_title': forms.TextInput(attrs={'placeholder': 'Your job title', 'class': 'form-control'}),
'job_place': forms.TextInput(attrs={'placeholder': 'Your company/institution', 'class': 'form-control'}),
}
exclude = ['user', 'history', 'favourite_services']
呈现的 HTML 如下:
<div class="form-group">
<label><label for="id_expertise">Expertise:</label></label>
<select name="expertise" required id="id_expertise" class="form-control">
<option value="" selected>---------</option>
<option value="N">Novice</option>
<option value="B">Beginner</option>
<option value="C">Competent</option>
<option value="P">Proficient</option>
<option value="E">Expert</option>
</select>
</div>
<div class="form-group">
<label><label for="id_favourite_provider">Favourite provider:</label></label>
<select name="favourite_provider" required id="id_favourite_provider">
<option value="" selected>---------</option>
<option value="1">AWS</option>
</select>
正如你所看到的,第二个选择没有 class 属性,尽管我在这里明确了这一点'favourite_provider': forms.Select(attrs={'class': 'form-control'})
。如何解决?
解决方案
Django文档引用(来自注释):
以声明方式定义的字段保持原样,因此对 Meta 属性(如小部件、标签、help_texts 或 error_messages)所做的任何自定义都将被忽略;这些仅适用于自动生成的字段。
要获得您想要的,您应该明确填写 ModelChoiceField 的小部件参数:
favourite_provider = forms.ModelChoiceField(queryset=Provider.objects.all(), widget=forms.Select(attrs={'class': 'form-control'}))
推荐阅读
- node.js - 如何在 Feathers 应用程序中跨钩子/服务为 amqplib 包装器设置持久连接
- javascript - 我如何“重新启动”jQuery(window).resize(checkSize)?
- android - 如何保存图像分类模型并将其用于 android
- npm - `yarn remove` 一个 deps 列表,而不会因错误而放弃
- excel - 将单元格样式从一种样式更改为另一种样式
- airflow - 自定义气流操作符作为“插件”或从 dags 目录直接导入
- c++ - 在树中,我得到错误,没有匹配函数调用函数,但我使用模板正确地完成了它
- java - 无法为 DDL 执行 docker 打开 JDBC 连接
- tensorflow - 尝试使用 Anaconda 的 pip 安装 TensorFlow 时出错
- excel - 是否可以将日期组合在一起并返回该组的开始和结束日期?