#はじめに
別記事の続きです。
Djangoでカスタムユーザモデルを定義し使用しいざform.save()を使用したらform.is_valid()で躓きました。
##事象
前回以下のようにカスタムフォームのインスタンスを作成しました。
app/views.py
from django.shortcuts import redirect,get_object_or_404
def update(request):
user=get_object_or_404(User,email=request.user.email)
if request.method=="POST":
form=UserChangeForm(request.POST,instance=user)
if form.is_valid():
form.save()
return redirect(hoge)
すると、form.is_valid()で常にFalseが返ってきます。
##原因
UserChangeFormクラスの引数の定義に問題がありました。
app/forms.py
class UserChangeForm(ModelForm):
def __init__(self, *args, **kwargs):
...
第一引数にselfを設定していました。
views.pyのupdate関数内では第一引数にrequest.POSTを渡していることが原因でした。
##解決策
以下のように、仮引数dataにrequest.POSTを設定することでform.is_valid()が正しく動作するようになりました。
app/views.py
form=UserChangeForm(data=request.POST,instance=user)
##参考サイト
https://qiita.com/The-town/items/b99daefbf85c32f22852