【问题标题】:django-registration create_user() unexpected keyworddjango-registration create_user() 意外关键字
【发布时间】:2011-08-25 20:09:03
【问题描述】:

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

【问题讨论】:

    标签: django django-registration django-profiles


    【解决方案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()
    

    这就是解决办法

    【讨论】:

      【解决方案2】:

      你在这里做错了很多事情

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

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

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

      【讨论】:

      • 如果不能使用 create_user 怎么存储名字和姓氏??
      猜你喜欢
      • 2011-09-13
      • 2013-10-29
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2012-02-10
      • 2015-06-19
      • 2015-12-11
      相关资源
      最近更新 更多