2013-08-08 3 views
0

Я использую пользовательскую модель пользователя Django 1.5s. Я хочу, чтобы пользователь вводил свое имя пользователя и регистрировался. NO PASSWORD (для тестирования в любом случае). Моя модель пользователя не имеет пароля. Но когда я пытаюсь войти в админ я получаю следующее сообщение об ошибке:Django 1.5 Пользовательская модель пользователя неизвестный столбец

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 - я не знаю, почему его пытаются получить их.

Ниже приведен мой код.

Мои Backend (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 

MY Модель

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' 
+0

'password' является частью' AbstractBaseUser', поэтому его необходимо автоматически добавить в свой 'AuthUser'. Вы успешно выполнили 'syncdb'? – Rohan

+0

Да, но мне удалось = False в мета, поскольку я не хочу, чтобы Django управлял им. Пользователи управляются извне. – Mark

+1

Я считаю, что вам придется добавить это поле в таблицу db. – Rohan

ответ

0

password является частью AbstractBaseUser поэтому он должен быть добавлен в вашей AuthUser модели, а также в таблице.

Как у вас есть managed=False для этой модели, вам нужно добавить это явно.

Смежные вопросы