在Django中使用参数设置表单字段的max_length
我有一个参数要传递给表单。这个参数是一个字典,用来配置表单。
我该怎么用字典里的值来设置一个字段的最大长度呢?
class StepTwoForm(forms.Form):
number = forms.CharField()
def __init__(self, *args, **kwargs):
if 'config' in kwargs:
config = kwargs.pop('config')
super(StepTwoForm, self).__init__(*args, **kwargs)
self.fields['number'].max_length = config['MAX_LENGTH']
我也试着把最大长度写成一个固定的值,但这样也不行。
难道我这样做是不对的?
1 个回答
3
这样做是可以的,不过你需要把 super(..)
这个调用放到条件外面,不然表单就不会正确设置。
from django.core import validators
class StepTwoForm(forms.Form):
number = forms.CharField()
def __init__(self, *args, **kwargs):
config = kwargs.pop('config', {})
super(StepTwoForm, self).__init__(*args, **kwargs)
if 'MAX_LENGTH' in config:
validator = validators.MaxLengthValidator(config['MAX_LENGTH'])
self.fields['number'].validators.append(validator)
更新
看起来 max_length
和 min_length
在初始化的时候就已经用了,所以这时候再设置 max_length
参数就太晚了。你需要手动添加验证器。我已经更新了代码以反映这个变化。这里是Django中相关的代码: https://github.com/django/django/blob/master/django/forms/fields.py#L186-L192