/ Erstellen eines Benutzerformulars in Django - django, Profil

Erstellen eines Benutzerformulars in Django hinzufügen - django, Profil

Ich möchte ein erstellen SINGLE Form, die dem Admin die Möglichkeit gibt,Erstellen Sie einen neuen Benutzer mit erweitertem Profil. Bitte beachten Sie, dass ich keine Admin- und Registrierungs-Apps verwenden möchte. Ich habe den Benutzer mit dem UserProfile-Modell erweitert. Ich habe alle Dokumente zur Erweiterung des Benutzerprofils gelesen. Aber ich weiß wirklich nicht, wie ich diese Informationen speichern soll. Ich habe das folgende Django-Formular für dieses Problem codiert:

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

Ist es o.k? aber es gibt mir einen Fehler in First_name und last_name. Sagt, dass Django in der Methode save () keinen Vornamen und keinen Vornamen erwartet.

Antworten:

13 für die Antwort № 1

create_user unterstützt nur die Argumente Benutzername, E-Mail und Passwort. Rufen Sie zuerst create_user auf und fügen Sie dann dem gespeicherten Objekt die zusätzlichen Werte hinzu.

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()