0

我有一个要传递给表单的参数。它是一个配置表单的字典。

如何使用字典中的值设置字段的 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']

我也只是尝试将 max_length 硬编码为一个也不起作用的任意值。

还是我以错误的方式解决这个问题?

4

1 回答 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

于 2013-01-21T16:36:52.377 回答