2013-05-13 100 views
4

我在Python 3.2.3上使用Django 1.5。AttributeError:'經理'對象沒有屬性'get_by_natural_key'

當我運行python3 manage.py syncdb,它建立的數據庫表,&詢問我的電子郵件(定義爲唯一的,而不是用戶名),然後當我輸入的是,我得到這個錯誤 -

AttributeError: 'Manager' object has no attribute 'get_by_natural_key'

奇怪的是,它無論如何創建表,但現在,我很困惑,因爲我真的沒有得到我應該做的。該文件說我應該創建一個Custom User Manager,但這就是真正的說法。它並沒有給我一個線索在哪裏創造它或如何。我查看了docs on Managers,但那真的沒有幫我弄清楚什麼。這太模糊了。我一直在努力尋找一些線索去尋找我需要做的事情,但我只是爲了越來越多的問題而不是任何答案而瘋了。這是我的models.py文件:

from django.db import models 
from django.contrib.auth.models import AbstractBaseUser 

class MyUsr(AbstractBaseUser): 
    email = models.EmailField(unique=True,db_index=True) 
    fname = models.CharField(max_length=255,blank=True, null=True) 
    surname = models.CharField(max_length=255,blank=True, null=True) 
    pwd_try_count = models.PositiveSmallIntegerField(blank=True, null=True) 
    pwd_last_try = models.DateTimeField(blank=True, null=True) 
    resetid = models.CharField(max_length=100,blank=True, null=True) 
    last_reset = models.DateTimeField(blank=True, null=True) 
    activation_code = models.CharField(max_length=100,blank=True, null=True) 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['fname','activation_code'] 

如何編寫自定義用戶管理器?作爲一種方法,我是否將其放入MyUsr模型中?或者,即使我應該做什麼?我應該做一些完全不同的事情嗎?這一點我不確定。我只是不明白。關於這方面的文件似乎並不清楚,爲解釋留下了很多空缺。我對Django相當陌生,但我已經進入Python數月。

回答

13

您可以通過子類BaseUserManager並在模型中分配給它的對象屬性自定義一個經理。

from django.contrib.auth.models import AbstractUser, UserManager 

class MyMgr(BaseUserManager): 
    def create_user(...): 
     # ... 
    def create_superuser(...): 
     # ... 


class MyUsr(AbstractBaseUser): 
    objects = MyMgr() 

    email = models.EmailField(unique=True, db_index=True) 
    fname = models.CharField(max_length=255, blank=True, null=True) 
    # ... 

您必須定義您的BaseUserManager的create_user和create_superuser方法。請參閱docs

+0

謝謝!這個問題讓我一陣悶悶不樂。無論我在哪裏看都找不到線索。 – Zamphatta 2013-05-15 00:05:38

+2

如果直接子類UserManager,則已經實現了這些方法! https://docs.djangoproject.com/zh/dev/ref/contrib/auth/#manager-methods – Caumons 2013-08-06 23:01:29

+1

@Caumons你的評論是非常有幫助的!謝謝;) – Erwan 2014-05-20 15:02:15

相關問題