django-registration create_user()意外关键字

时间:2011-05-15 09:23:57

标签: django django-registration django-profiles

我正在尝试创建自定义配置文件,以便向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 个答案:

答案 0 :(得分:8)

你在这里犯了很多错误

首先,这些不是User模型上的字段,它们位于Profile模型上。因此,用户管理器方法无法识别它们也就不足为奇了。您需要使用create_user以正常方式定义User对象,然后使用该用户定义Profile实例。

其次,create_user不会将所有字段名称作为关键字参数 - 只需要username, email and password。同样,您需要在之后自己设置其他字段。

但是,我完全不明白为什么你定义了这些特定字段。它们都在built-in User model中提供。特别是,您绝对不应该定义自己的密码字段,除非您还编写了一些代码来将密码存储为哈希而不是纯文本。

答案 1 :(得分:1)

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

这是解决方案