DjangoでWebアプリを作成しており、
削除ボタンを押した際に、DBのis_enabledフィールドの値がFalseで更新される処理を実装しています。
実装している中で、下記の疑問が浮かびました。
認識に間違いがないでしょうか。ご教示をお願いしたく存じます。
【views.py】 class DeleteView(LoginRequiredMixin, generic.UpdateView): model = Clients fields = ('is_enabled',) template_name = 'delete.html' success_url = reverse_lazy('client:list') def form_valid(self, form): delete_value = form.save(commit=False) delete_value.is_enabled = False delete_value.save() messages.success(self.request,'削除が完了しました。') return super().form_valid(form) def form_invalid(self, form): messages.error(self.request,'削除ができませんでした。') return super().form_invalid(form)
【自己認識内容、疑問】
・削除ボタンが押された際の挙動について、
テンプレートでaction=""が指定されていなくてもDeleteViewクラスが動くのは、同クラスのtemplate_name変数で指定されている為、Djangoで挙動を制御してくれている。
【delete.html】 <form method="post"> {% csrf_token %} <p>削除しますか?</p> <button type="submit">削除</button> </form>
・form_validメソッドが動作するタイミングは、エラーがない状態で、指定したテンプレート(template_name = 'delete.html')からのpostリクエストを受け取った際に実行されている。
・form_validメソッドの引数formは、fields変数で指定したフィールドを指している。(fields変数ではなくform_class変数を指定している場合はそちらが対象となる)
・データベースが更新されるタイミングはsave()メソッドが実行されたタイミングである。
save()の記述がなく、明示化されていない場合は、form_validメソッドが実行されたタイミングで更新されており、親クラスで暗黙的にsave()メソッドが実行されている。
・特定のDBフィールドを更新するだけの処理を記述する方法はこういったコーディングが一般的か(もっとシンプルな記述方法はないでしょうか)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/31 10:11