我试图覆盖 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属性? widgetchoices