我正在尝试创建自定义配置文件,以便向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()
识别这些新列,我缺少什么?谢谢。
答案 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()
这是解决方案