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 に答える