Как создать пользователя с именем, фамилией и адресом электронной почты. И не с именем пользователя

Есть ли способ создать пользователя без имени пользователя? Я пытался сделать это по имени, фамилии, паролю и электронной почте. Но получил ошибку:

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

Итак, я искал создание так, а затем обнаружил, что Django нуждается в имени пользователя. Но я надеюсь, что есть и другой путь. Может кто-нибудь, пожалуйста, проведите меня через, если есть. Спасибо.

2 ответа

Решение

Если вы не хотите использовать пользовательскую модель, вы можете создать подкласс 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 поле, которое вы должны были бы сделать также. Изменяйся по мере необходимости, надеюсь, что это поможет тебе.

Да, это возможно. Вы можете переопределить модель пользователя по умолчанию, подставив пользовательскую модель пользователя. Вот детали, заменяющие пользовательскую модель пользователя.

Пример кода: 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
Другие вопросы по тегам