django-registration create_user() неожиданное ключевое слово
Я пытаюсь создать собственный профиль для добавления дополнительных полей в django-registration
, Вот код, который у меня есть до сих пор -
в models.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
password = models.CharField(max_length=50)
И в settings.py
AUTH_PROFILE_MODULE = 'myproject.Profile'
Тем не менее, я получаю следующую ошибку при попытке использовать create_user(). Вот что происходит, когда я набираю это в интерпретаторе -
>>> from django.contrib.auth.models import User
>>> User.objects.create_user(first_name='tom',last_name='smith',email='ts@gmail.com',password='hello')
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: create_user() got an unexpected keyword argument 'first_name'
Чего мне не хватает для того, чтобы create_user()
распознать эти новые столбцы? Спасибо.
2 ответа
Есть ряд вещей, которые вы делаете неправильно здесь
Во-первых, это не поля модели User, а модель Profile. Поэтому не удивительно, что метод диспетчера пользователей их не распознает. Вам нужно будет определить объект User обычным способом с помощью create_user, а затем определить экземпляр профиля, используя этого пользователя.
Во-вторых, create_user
не принимает все имена полей в качестве аргументов ключевых слов - он принимает только имя пользователя, адрес электронной почты и пароль. Опять же, вам нужно будет самостоятельно установить другие поля.
Однако я совсем не понимаю, почему вы определили именно эти поля. Все они доступны во встроенной модели User. В частности, вам определенно не следует определять собственное поле пароля, если только вы не напишите некоторый код для хранения пароля в виде хэша, а не в виде простого текста.
username, first_name, last_name, email, password = kwargs['username'], kwargs['first_name'], kwargs['last_name'], kwargs['email'], kwargs['password1']
user = User(username=username, email=email, first_name=first_name, last_name=last_name)
user.set_password(password)
user.save()
это решение