【问题标题】:Django 1.5 Custom User Model unknown columnDjango 1.5 自定义用户模型未知列
【发布时间】:2013-08-08 11:50:34
【问题描述】:

我正在使用 Django 1.5s 自定义用户模型。我想让用户输入他们的用户名 - 并登录。没有密码(无论如何测试)。我的用户模型没有密码。但是当我尝试登录管理员时,我收到以下错误:

OperationalError(1054, "Unknown column 'hrms.password' in 'field list'"

它似乎试图在 authenticate() 方法中执行这个查询。

SELECT `myusers`.`password`, `myusers`.`last_login`, `myusers`.`id`, `myusers`.`user`, `myusers`.`name`, `myusers`.`firstname`, `myusers`.`lastname`, `myusers`.`organisation`, `myusers`.`unit`, `myusers`.`grade`, `myusers`.`email`, `myusers`.`position`, `myusers`.`manager` FROM `myusers` WHERE `myusers`.`user` = 'warrenm' "

我没有字段密码 last_login - 我不知道它为什么要尝试获取它们。

下面是我的代码。

我的后端 (auth.py)

from epmds.application.models import AuthUser

class MyBackend(object):

    def get_user(self, user_id):
        # get a user from the user_id
        try:
            return AuthUser.objects.get(pk=user_id)
        except AuthUser.DoesNotExist:
            return None

    def authenticate(self, username=None, password=None):
        # check the username/password and return a user
        user = AuthUser.objects.get(user=username)
        return user

我的模特

class AuthUser(AbstractBaseUser):
    id = models.CharField(primary_key=True, max_length=15)
    user = models.CharField('username', max_length=20, unique=True)
    name = models.CharField(max_length=100)
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    organisation = models.CharField(max_length=100)
    email = models.CharField(max_length=50, blank=True, null=True)

    USERNAME_FIELD = 'user'

    def get_full_name(self):
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        return self.first_name

    class Meta:
        ordering = ('lastname', 'firstname')
        managed = False
        db_table = 'myusers'

【问题讨论】:

  • passwordAbstractBaseUser 的一部分,因此它应该自动添加到您的AuthUser 中。 syncdb你成功了吗?
  • 是的,但我已经在元数据中管理了 = False,因为我不希望 Django 管理它。用户由外部管理。
  • 我相信您将不得不在 db 表中添加该字段。
  • 你是对的 - 添加它,它似乎很好!

标签: django django-authentication


【解决方案1】:

passwordAbstractBaseUser 的一部分,因此它应该添加到您的AuthUser 模型以及表格中。

由于您有此模型的 managed=False,因此您需要明确添加。

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 2014-04-05
    • 2013-04-20
    • 2013-02-24
    • 2013-06-01
    • 2013-02-13
    • 2013-12-13
    • 2013-07-28
    • 2013-06-20
    相关资源
    最近更新 更多