我试图覆盖 Django 的默认小部件,ChoiceField
同时保留模型中生成的选择。这是我的模型的相关部分:
class UserGroup(models.Model):
icon = models.CharField(max_length=100, choices=<function call>)
而我的形式:
class UserGroupForm(forms.ModelForm):
icon = models.ChoiceField(widget=IconPicker)
class Meta:
model = UserGroup
fields = [ 'icon', ]
像这样覆盖ChoiceField
's 小部件会破坏form.fields['icon'].choices
通常从模型继承的属性并将其设置为[]
Django. 如果我icon
从表单中删除字段定义,则保留选项 - 但当然小部件默认为Select
.
(不幸的是,无法从表单代码访问生成模型字段选项的函数。)
到目前为止,我想出的最好的方法是将icon
表单字段定义更改为
icon = ChoiceField(choices=UserGroup._meta.get_field_by_name('icon')[0].choices,
widget=IconPicker)
但这很笨拙,我宁愿让选择自动传递,就像内省的ChoiceField
行为一样。(我尝试将子类化为相同的子类ChoiceField
,IconChoiceField
但对于默认小部件,但由于这个问题IconPicker
,Django 将其转换回TypedChoiceField
具有默认小部件的 a 。)Select
有没有办法在保留从模型继承的行为的同时覆盖ChoiceField
's属性? widget
choices