バリデーションチェックが走るところは以下の部分なので、エラーが起きたときは以下の部分をチェックするといい

 

①formのクラスの定義部分

    update_course = CourseModelChoiceField(
        label='コース',
        required=False,
        queryset=Course.objects.none(),
        help_text='適用開始日以降のコースが選択可能です。'
    )

 

もしオリジナルのバリデーションをチェックを作成していた場合は、そこもチェックすること。今回は以下の部分で作成した

class CourseModelChoiceField(forms.ModelChoiceField):
        def to_python(self, value):
            if not value:
                return None
            try:
                return Course.objects.get(pk=value)
            except Course.DoesNotExist:
                raise ValidationError(self.error_messages['invalid_choice'], code='invalid_choice')

 

 

②formコンストラクタの部分

    def __init__(self, *args, begin_date=None, end_date=None, update_items=None, user=None, **kwargs):

 

 

③viewのinitメソッド、def get_form_kwargs(self)

コンストラクタの設定はviewのクラスベースビュー(FormViewを引数に設定して継承しているクラス)でinitと引数が設定されている部分を見ればいい

 

 

※ポイント

バリデーションチェックはバックエンドでの処理なので、フロントエンド側のJSで値を持ってきても、画面をリロードした際のバリデーションチェックには通らないので注意。


※ポイント②

フィールドの定義とコンストラクタの使い分けについて
フィールドはそのフィールドを定義しているだけだから、動的処理をするために引数を受け取ることができない。引数を使うfilter(id=○○)も使えない
引数を使って動的処理をしたい場合はコンストラクタを使用する