模型字段的自定义表单字段

时间:2012-10-26 14:38:38

标签: django django-models django-forms

我想在模型中使用USSocialSecurityNumberField。确切地说,我可以在模型中使用CharField,但我希望将USSocialSecurityNumberField注入到基于该模型的模型中。

除了subclassing model fields之外,有没有办法覆盖模型字段的默认表单字段?我的意思是:

ssn = models.CharField(max_length=11, formfield=USSocialSecurityNumberField)

这对于一次性需求来说是最简单的解决方案。

PS。我也对模型字段和表单字段的其他组合感兴趣,因此子类化是一个烦人的解决方案..

2 个答案:

答案 0 :(得分:2)

我不确定这正是你要找的。如果您有兴趣验证表单域的值,可以使用验证器:

def validate_USSocialSecurityNumberField(myNumber):
    # here goes the validation algorithm which will raise a ValidationError 
    # if the number is not in the correct format
    # and of course you will catch the exception
    # except ValueError:
    #     raise ValidationError(u'"%s" is not in the correct format!' % myNumber)

您的模型可能如下所示:

ssn = models.CharField(max_length=11, validators = [validate_USSocialSecurityNumberField])

答案 1 :(得分:1)

这种论证既不存在于Field也不存在于ModelField中。但是子类化不应该太困难,我相信这一点应该有用:

class MyModelField(models.Field):
    def formfield(self, **kwargs):
        kwargs['form_class'] = forms.USSocialSecurityNumberField
        return super(MyModelField, self).formfield(**kwargs)