【问题标题】:Creating an Add user form in Django在 Django 中创建添加用户表单
【发布时间】:2012-05-21 09:35:20
【问题描述】:

我想创建一个 SINGLE 表单,让管理员能够使用扩展配置文件创建新用户。请注意,我不想使用管理和注册应用程序。 我已经使用 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

可以吗?但是它给了我一个名字和姓氏的错误。说 django 在 save() 方法中不期望 first_name 和 last_name。

【问题讨论】:

标签: django profile


【解决方案1】:

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

【讨论】:

  • 你是对的。其他用户个人资料字段呢?我必须像用户字段一样保存它们吗?顺便说一句,我想确保我为此选择了正确的解决方案。那么,对吗?
  • 如果您指的是“公司”和“地址”之类的字段,您可以创建一个 UserProfile 模型,该模型与用户 (docs.djangoproject.com/en/dev/topics/auth/#auth-profiles) 具有一对一的关系。这样,您可以添加任意数量的字段,并使用 user.get_profile().company 获取它们
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2012-03-31
  • 2014-10-21
  • 2018-09-25
  • 2019-01-04
  • 2023-04-10
相关资源
最近更新 更多