Formとmodelでぐちゃぐちゃになった話

いつもよくわかんないけどモデルからつくってた

models.py
class User(models.Model):
    email = models.CharField(u'メールアドレス', max_length=200 ,blank=False)
    password = models.CharField(u'パスワード', max_length=64 ,blank=False)
    password2 = models.CharField(u'パスワード(確認用)', max_length=64 ,blank=False)
    nickname = models.CharField(u'ユーザーネーム', max_length=64 ,blank=False)
forms.py
class LoginForm(ModelForm):
    class Meta:
        model = User
        fields = ('email','password')

こんな感じでなんかこう継承してきた。

パスワードを空にする必要があった

このままではパスワードのところでis_valid(): ができなくてcleaned_data['hoge']がとれない!!!!

forms.pyを直接書き換えた

forms.py
class ChangeprofForm(forms.Form):
    email = forms.CharField(label=u'メールアドレス',max_length=200,required=True)
    nickname = forms.CharField(label=u'ユーザーネーム',max_length=64,required=True)
    password = forms.CharField(label=u'パスワード', max_length=64 ,required=False)
    password2 = forms.CharField(label=u'パスワード(確認用)', max_length=64 ,required=False)

注意点

  • modelsでは使っていた「u'hogehoge'」ではなく「label=u'hogehoge'」にする
  • modelsでは使っていた「blank」ではなく「required」にする

まあそんな

そんなことで詰まる初心者なんだよ!悪いか!

追記

こんな方法でもやれるとのこと。こっちのほうがModelをそのままつかえてなおかつsave()などDB操作もできてとても良い。

forms.py
class ChangeprofForm(forms.ModelForm):
    password = forms.CharField(label=u'パスワード', max_length=64 ,required=False)
    password2 = forms.CharField(label=u'パスワード(確認用)', max_length=64 ,required=False)
    class Meta:
        model = User
        exclude = ('password','password2')