django-registration create_user () неожиданное ключевое слово - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь создать пользовательский профиль для добавления дополнительных полей к 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 ]

8 голосов
/ 15 мая 2011

Есть ряд вещей, которые вы делаете неправильно

Во-первых, это не поля модели User, а модель Profile. Поэтому не удивительно, что метод диспетчера пользователей их не распознает. Вам нужно будет определить объект User обычным способом с помощью create_user, а затем определить экземпляр профиля, используя этого пользователя.

Во-вторых, create_user не принимает все имена полей в качестве аргументов ключевого слова - для этого требуется только имя пользователя, адрес электронной почты и пароль . Опять же, вам нужно будет самостоятельно установить другие поля.

Однако я совсем не понимаю, почему вы определили эти конкретные поля. Все они доступны во встроенной пользовательской модели 1011 *. В частности, вам определенно не следует определять собственное поле пароля, если только вы не напишите некоторый код для хранения пароля в виде хэша, а не в виде простого текста.

1 голос
/ 26 декабря 2012
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()

это решение

...