我CharField with
choices
在模型中有,但我需要将此字段渲染为CheckboxSelectMultiple
,它将列表返回到表单类。使用TypedChoiceField
自动分配给Field
选项的表单类,它不被验证。我决定更改form_class
该字段并使用 , 编写一个新字段TypedMultipleChoiceField
form_class
来验证列表。
class MultipleTypedChoiceModelField(models.Field):
def get_internal_type(self):
return 'MultipleTypedChoiceModelField'
def formfield(self, **kwargs):
defaults = {'form_class': TypedMultipleChoiceField, }
defaults.update(kwargs)
return super(MultipleTypedChoiceModelField, self).formfield(**defaults)
但它没有任何效果。如果我注释掉模型字段中的选项,则类型为 MultipleTypedChoiceModelField。所以我相信 form_class 是在具有选择定义列表的设备中指定的。
def formfield(self, **kwargs):
if self._choices: # or self.choices:
defaults = {'form_class': TypedMultipleChoiceField, }
defaults.update(kwargs)
return super(MultipleTypedChoiceModelField, self).formfield(**defaults)
但它也没有效果。我还没有找到 的分配在哪里form_class
。也许我有更好的方法来改变这种行为?我不打算添加具有多对多关系的额外模型,因为这显然是不必要的。