SINGLEというフォームを作成して、管理者が拡張プロファイルを持つ新しいユーザーを作成できるようにしたいと考えています。 adminと登録アプリを使用したくないことに注意してください。 私は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
それはOKです: は、私は、この問題のために、次のDjangoのフォームをコード化されましたか?しかし、それは私にfirst_nameとlast_nameのエラーを与えます。 djangoはsave()メソッドでfirst_nameとlast_nameを期待していません。
通常のフォームを使って 'save'メソッドにアクセスすることができません。これはモデルフォームで利用可能ですhttps://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method – super9