1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Django]form.is_valid()がTrueにならない

Posted at

#はじめに
別記事の続きです。
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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?