如何使用名字,姓氏和电子邮件创建用户。而不是用户名

时间:2013-08-17 23:51:55

标签: django django-forms django-authentication

有没有办法在没有用户名的情况下创建用户?我试过first_name,last_name,密码和电子邮件。但是得到了一个错误:

TypeError at /accounts/register/
create_user() takes at least 2 arguments (3 given)

所以,我搜索了创建,然后发现django需要一个用户名。但我希望还有其他方法。任何人都可以指导我,如果有的话。谢谢。

2 个答案:

答案 0 :(得分:3)

如果您不想使用自定义用户模型,则可以继承UserCreationForm并覆盖username字段:

from django.contrib.auth.forms import UserCreationForm


class UserCreationForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username',)

    username = forms.EmailField(label='Email', max_length=255)

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = user.username
        user.save()
        return user

现在,除了将电子邮件字段自动设置为用户名以使其保持同步之外,您还有UserCreationForm验证并使用用户名的电子邮件地址。这不会设置password字段,您也需要这样做。根据需要改变,希望能让你前进。

答案 1 :(得分:1)

是的,有可能。您可以通过替换自定义用户模型来覆盖默认用户模型。以下是详细信息Substituting a custom User model

示例代码:models.py

if django.VERSION >= (1, 5):
    from django.contrib.auth.models import AbstractBaseUser

#Identifier is e-mail instead of user ID
class User(AbstractBaseUser):
    email = models.EmailField(max_length=254, unique=True, db_index=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

    REQUIRED_FIELDS = ['email']

    def __unicode__(self):
        return self.email