2014-07-13 6 views
0

관리자를 정의하지 않으면 오류가 발생하지 않습니다. 다음 작업을 수행 할 때, :Django의 기본 관리자

user = UserModel._default_manager.get_by_natural_key(username) 
:

class User(AbstractUser): 
    # some fields 
    objects = model.Manager() 
    hstore_manager = hstore.HStoreManager() 

나는

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

이 라인에서 인증 방법에 /django/contrib/auth/backends.py에 문제가 얻을

사용자는 AbstractUser 모델에서 상속됩니다. 감사!

답변

1

인증 프레임 워크는 User 개체의 기본 관리자가 몇 가지 추가 메소드를 구현 것으로 기대하고있다. 기본 메소드는 django.contrib.auth.models.BaseUserManager에 구현되고, 모델 별 메소드는 django.contrib.auth.models.UserManager에 구현됩니다. 사용자 모델은 기본 구현과 유사한 경우, 당신은 단지 UserManager을 사용할 수 있습니다 (즉, 그것은이 username, email, is_staff, is_active, is_superuser, last_logindate_joined 필드 정의). 그렇지 않으면 BaseUserManager의 하위 클래스를 만들고 create_usercreate_superuser 메소드를 구현해야합니다.

AbstractUser을 기본 클래스로 사용하는 경우 UserManager 클래스를 사용하거나 추가 메서드를 정의해야하는 경우 UserManager의 하위 클래스를 사용할 수 있습니다.

또한 custom user managers에 대한 설명서를 참조하십시오.

+0

또한 사용자 지정 사용자 모델을 사용하고 AbstractUser에서 서브 클래 싱합니다. UserManager에서 사용자 지정 관리자를 서브 클래 싱하기 위해 추가 사용자 지정 관리자가 필요합니다. – Aitvaras

2

AbstructUser에서 직접 하위 클래스를 만들면이 오류가 발생합니다. 사용자와 일대일 관계를 만들면이 오류가 발생하지 않습니다. 내가 테스트 한

class ExManager(models.Manager): 
    def get_queryset(self): 
     return super(ExManager, self).get_queryset().all() 

class Post(models.Model): 
     user= models.OneToOneField(User) 
     title= models.CharField(max_length=150, null=True, default=None) 
     objects=models.Manager() 
     ab_ob= ExManager() 

와 장고 쉘에서 : 예를 들어

In [2]: k=Post.ab_ob.all() 
In [3]: k 
Out[3]: [] 
In [4]: from django.contrib.auth.models import User 
In [5]: u=User.objects.get(id=1) 
In [6]: k1=Post(user=u, title="asdasd")    
In [7]: k1.save() 
In [8]: k2=Post.ab_ob.all()       
In [9]: k2 
Out[9]: [<Post: Post object>] 
관련 문제