16

Django ChoiceField "指定された値が選択肢のリストに存在することを検証します。"

ChoiceField が必要ですが (ビューに選択肢を入力できるようにするため)、選択肢が選択肢のリストにあるかどうかを Django に確認させたくありません。理由を説明するのは複雑ですが、これが必要です。これはどのように達成されますか?

4

3 に答える 3

24

検証をスキップするカスタムChoiceFieldとオーバーライドを作成できます。

class ChoiceFieldNoValidation(ChoiceField):
    def validate(self, value):
        pass

あなたがこれを必要とする理由が本当に思いつかないので、あなたのユースケースを知りたいです。

編集:テストするには、フォームを作成します:

class TestForm(forms.Form):
    choice = ChoiceFieldNoValidation(choices=[('one', 'One'), ('two', 'Two')])

「無効な」データを提供し、フォームがまだ有効かどうかを確認します。

form = TestForm({'choice': 'not-a-valid-choice'})
form.is_valid()  # True
于 2013-11-04T16:17:20.463 に答える
1

別のオプションとして、独自のバリデータを作成できます

from django.core.exceptions import ValidationError

def validate_all_choices(value):
    # here have your custom logic
    pass

そしてあなたの形で

class MyForm(forms.Form):
    my_field = forms.ChoiceField(validators=[validate_all_choices])

編集: 別のオプションとして、フィールドを として定義することもできますがCharField、選択した選択としてテンプレートで手動でレンダリングします。このようにして、カスタムバリデータを必要とせずにすべてを受け入れることができます

于 2013-11-04T16:37:48.073 に答える