Django中表单和小部件的奇怪行为

时间:2015-02-05 18:04:25

标签: django django-models django-forms

我有以下简单的表单字段

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')

1 个答案:

答案 0 :(得分:0)

发现问题。 问题出在管理员身上。管理员传递了CharField的kwargs默认小部件 - widgets.AdminTextInputWidget