在Django中创建添加用户表单 [英] Creating an Add user form in Django

查看:132
本文介绍了在Django中创建添加用户表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个 SINGLE 表单,该表单使管理员能够创建具有扩展配置文件的新用户。请注意,我不想使用管理员和注册应用程序。
我用UserProfile模型扩展了用户。我已经阅读了所有与扩展用户资料有关的文件。但是,我真的不知道如何保存这些信息。
我为这个问题编码了以下django表单:

I want to create a SINGLE form which gives the ability to the admin to create a new user with extended profile. Please note that, I don't want to use admin and registration apps. I have extended the user with the UserProfile model. I have read all the documents related to extending user profile. But, I really don't know how to save these information. I coded the following django form for this issue:

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。

Is it OK? however it gives me an error in first_name and last_name. Says django doesn't expect first_name and last_name in save() method.

推荐答案

create_user只支持用户名,电子邮件和密码参数。首先调用create_user,然后将额外的值添加到保存的对象。

create_user only supports the username, email and password arguments. First call create_user, then add the extra values to the saved object.

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

这篇关于在Django中创建添加用户表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆