1

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

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

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

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

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

4

2 回答 2

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])
于 2012-10-26T14:53:35.103 回答
1

Field 和 ModelField 都不存在这样的论点。但是子类化应该不会太难,我相信类似这样的东西应该可以工作:

class MyModelField(models.Field):
    def formfield(self, **kwargs):
        kwargs['form_class'] = forms.USSocialSecurityNumberField
        return super(MyModelField, self).formfield(**kwargs)
于 2012-10-26T14:57:41.633 回答