2

我正在尝试创建一个自定义配置文件以将其他字段添加到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()为了识别这些新列,我缺少什么?谢谢你。

4

2 回答 2

10

你在这里做错了很多事情

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

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

但是,我完全不明白您为什么要定义这些特定字段。它们都在内置的用户模型中可用。特别是,您绝对不应该定义自己的密码字段,除非您还编写了一些代码将密码存储为哈希而不是纯文本。

于 2011-05-15T09:36:38.280 回答
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()

这就是解决方案

于 2012-12-25T21:17:20.893 回答