我有以下简单的表单字段
class PhoneField(CharField):
widget = PhoneWidget
def clean(self, value):
value = re.sub('\D', '', super(PhoneField, self).clean(value))
if len(value) < 7:
raise ValidationError(_("Phone number is too short"), code='too_short')
return value
但是,小部件仍然是文本输入。 但是,如果我写
def __init__(self, *args, **kwargs):
kwargs['widget'] = PhoneWidget
super(PhoneField, self).__init__(*args, **kwargs)
然后它完美无缺。挖掘我注意到的代码,如果未在kwargs中指定widget,则使用self.widget,但不是这种情况。那是为什么?
请注意,我不会在代码中传递小部件。
field = PhoneField(label='Phone')
答案 0 :(得分:0)
发现问题。
问题出在管理员身上。管理员传递了CharField的kwargs
默认小部件 - widgets.AdminTextInputWidget
。