8

管理者が拡張プロファイルを持つ新しいユーザーを作成できるようにする単一のフォームを作成したいと考えています。管理アプリや登録アプリは使いたくないので注意してください。UserProfile モデルでユーザーを拡張しました。ユーザー プロファイルの拡張に関連するすべてのドキュメントを読みました。しかし、これらの情報を保存する方法が本当にわかりません。この問題のために、次の django フォームをコーディングしました。

class CreateUserForm(forms.Form):
username = forms.CharField(max_length=30)
first_name = forms.CharField()
last_name = forms.CharField()
password1=forms.CharField(max_length=30,widget=forms.PasswordInput()) #render_value=False
password2=forms.CharField(max_length=30,widget=forms.PasswordInput())
email=forms.EmailField(required=False)

title = forms.ChoiceField(choices=TITLE_CHOICES)

def clean_username(self): # check if username dos not exist before
    try:
        User.objects.get(username=self.cleaned_data['username']) #get user from user model
    except User.DoesNotExist :
        return self.cleaned_data['username']

    raise forms.ValidationError("this user exist already")


def clean(self): # check if password 1 and password2 match each other
    if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:#check if both pass first validation
        if self.cleaned_data['password1'] != self.cleaned_data['password2']: # check if they match each other
            raise forms.ValidationError("passwords dont match each other")

    return self.cleaned_data


def save(self): # create new user
    new_user=User.objects.create_user(username=self.cleaned_data['username'],
                                    first_name=self.cleaned_data['first_name'],
                                    last_name=self.cleaned_data['last_name'],
                                    password=self.cleaned_data['password1'],
                                    email=self.cleaned_data['email'],
                                        )

    return new_user

大丈夫ですか?ただし、first_name と last_name でエラーが発生します。django は、save() メソッドで first_name と last_name を期待していないと言います。

4

1 に答える 1

14

create_user は、ユーザー名、電子メール、およびパスワードの引数のみをサポートします。最初に create_user を呼び出してから、保存されたオブジェクトに追加の値を追加します。

new_user=User.objects.create_user(self.cleaned_data['username'],
                                  self.cleaned_data['email'],
                                  self.cleaned_data['password1'])
new_user.first_name = self.cleaned_data['first_name']
new_user.last_name = self.cleaned_data['last_name']
new_user.save()
于 2012-05-13T21:27:07.743 に答える