2013-02-06 60 views
3

我有我正努力進行身份驗證自定義模型:AttributeError:'用戶'對象在Django中沒有屬性'check_password'錯誤?

class User(models.Model): 
    #id = models.IntegerField(primary_key=True) 
    #identifier = models.CharField(max_length=40, unique=True, db_index=True) 
    username = models.CharField(max_length=90, unique=True, db_index=True) 
    create_time = models.DateTimeField(null=True, blank=True) 
    update_time = models.DateTimeField(null=True, blank=True) 
    email = models.CharField(max_length=225) 
    password = models.CharField(max_length=120) 
    external = models.IntegerField(null=True, blank=True) 
    deleted = models.IntegerField(null=True, blank=True) 
    purged = models.IntegerField(null=True, blank=True) 
    form_values_id = models.IntegerField(null=True, blank=True) 
    disk_usage = models.DecimalField(null=True, max_digits=16, decimal_places=0, blank=True) 
    #last_login = models.DateTimeField() 

    objects = UserManager() 
    USERNAME_FIELD = 'username' 
    #check_password(password) 
    class Meta: 
     db_table = u'galaxy_user' 

我在'設置提到了這一點。

AUTH_USER_MODEL = 'fileupload.user'

#views.py 
     def login_backend(request): 
      if request.method == 'POST': 
       username = request.POST['username'] 
       password = request.POST['password'] 
       user = authenticate(username=username, password=password) 
       if user is not None: 
        login(request, user) 
        return HttpResponseRedirect('/overview/') 
       else: 
        return HttpResponseRedirect('/login_backend/') 
      else: 
       return render_to_response('login_backend.html', context_instance=RequestContext(request)) 

但是我得到這個錯誤:

AttributeError: 'User' object has no attribute 'check_password' error 

我在做什麼錯?

+0

爲什麼你重寫用戶模型?如果您想爲用戶添加其他字段信息,只需將其擴展。不要重寫它。 – catherine

+0

這完全是一個新模型,我只是將其命名爲User。 – pynovice

+0

是的我知道,但不要使用用戶模型,因爲Django使用它作爲默認模型。您遇到了check_password錯誤,因爲真正的用戶模型有一個內置函數,但是您的自定義用戶模型沒有。 – catherine

回答

4

custom user documentation所述,您的用戶模型必須從django.contrib.auth.models.AbstractBaseUser繼承,該模型將添加所有相關的方法。

+0

我做到了,但我得到了這個錯誤:FieldError:類'用戶'中的本地字段'密碼'與基類'AbstractBaseUser' 類似名稱的字段發生衝突之後,我評論了密碼字段,但正確的用戶名和密碼被證實是錯誤的。 – pynovice

0

the documentation for Django 1.5(這是帶AUTH_USER_MODEL的第一個)顯示了替代用戶模型必須具有的方法,其中之一是check_password。所以,海事組織,你有兩種方法來解決你的問題。

  1. 正確替換用戶模型,提供所有必需的方法。
  2. 忘掉代替用戶模型和just write a custom AUTH BACKEND,而不包括 「AUTH_USER_MODEL」
+0

我如何提供所有必需的方法? – pynovice

+0

只需添加[AbstractBaseUser]中定義的所有方法(https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser) – esauro

+0

這就是我想要的但要添加在哪裏? – pynovice

0

獲取Django 1.5 RC。並編寫一個自定義用戶類,並按照these instructions

+0

我正在使用Django 1.5 RC。我正在按照說明操作。找出我需要添加check_password方法,但是要添加到哪裏? – pynovice

+0

您的User模型不是從'AbstractBaseUser'這就是爲什麼它沒有'check_password'方法。你應該有一些東西像'class MyUser(AbstractBaseUser):' – dmg

+0

另外,不要忘記在'settings.py'中提到以下行:'AUTH_USER_MODEL =''' – dmg

相關問題