在Django中使用参数设置表单字段的max_length

0 投票
1 回答
1727 浏览
提问于 2025-04-17 13:18

我有一个参数要传递给表单。这个参数是一个字典,用来配置表单。

我该怎么用字典里的值来设置一个字段的最大长度呢?

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_lengthmin_length 在初始化的时候就已经用了,所以这时候再设置 max_length 参数就太晚了。你需要手动添加验证器。我已经更新了代码以反映这个变化。这里是Django中相关的代码: https://github.com/django/django/blob/master/django/forms/fields.py#L186-L192

撰写回答