2013-05-17 4 views
6

나는 장고 1.5로 웹 응용 프로그램을 만들고 있습니다. 사용자 정의 UserManager를 사용하여 사용자 정의 사용자 모델을 사용하고 있습니다. 공식 Django 문서의 지침과 예제를 따랐습니다.장고 사용자 정의 사용자 모델 및 usermanager

이제 UserManager.create_user(...)을 통해 새 사용자를 만들려고하는데 NoneType 오류가 발생했습니다. UserManager의 특성 모델이 없음 유형 인 것으로 보입니다. User 모델에서 UserManager를 올바로 설정하고 있다고 생각합니다 (objects = UserManager())

정말 실수를 저지르고 있습니다. 부스 코딩 파트너와 나는 장고를 처음 사용합니다. 어쩌면 우리를 도울 수 있습니다.

class UserManager(BaseUserManager): 
""" 
    create a new user 

    @param username: the name for the new user 
    @param password: the password for the new user. if none is provided a random password is generated 
    @param person: the corresponding person object for this user 
""" 
def create_user(self, username, person, password=None): 
    if not username: 
     raise ValueError('User must have a valid username') 

    user = self.model(username=username, created=datetime.now(), must_change_password=True, deleted=False, person=person) 

    user.set_password(password) 
    user.save(using=self._db) 
    return user 

class User(AbstractBaseUser): 
    ## the id of the user. unique through the application 
    user_id  = models.AutoField(primary_key=True) 
    ## the name of the user. unique through the application 
    username = models.CharField(max_length=32, unique=True) 
    ## the date when the user was created 
    created  = models.DateTimeField() 
    ## iff this is true the user must set a new password at next login 
    must_change_password = models.BooleanField(default=True) 
    ## iff true the user is marked as deleted and can not login 
    deleted  = models.BooleanField(default=False) 
    ## iff true the user is admin and has all permissions. use with care! 
    is_admin = models.BooleanField(default=False) 
    ## reference to the person entity that is linked to this specific user 
    person  = models.ForeignKey(Person) 
    ## indicates if the user is active or not 
    active = models.BooleanField(default=True) 

    ## define the user manager class for User 
    objects  = UserManager() 

    # necessary to use the django authentication framework: this field is used as username 
    USERNAME_FIELD = 'username' 

난 당신이 UserManager.create_user(...)를 호출해서는 안 새 사용자를 만들려면 UserManager

답변

5

에 CREATE_USER() 메소드에 라인 user = self.model(..)에서 NoneType 오류를 받고 있어요 : 여기

는 코드입니다. 대신 다음을 사용해야합니다.

from django.contrib.auth import get_user_model 
get_user_model().objects.create_user(...) 

이렇게하면 장고 관리자가 작동합니다. 문서를 읽을 수 있습니다 here

1

의견을 말할 담당자가 충분하지 않아 답변을 추가해야했습니다. 그러나 @ Aldarund의 답변에있는 링크는 get_user_model()의 사용을 전혀 설명하지 않습니다. 그러나 this link

3

내가 또한 사용자 정의 사용자 모델을 저장하는 문제가 있었다 ... 도움이 될 것입니다 그리고 그것을 파악하는 동안 저를했다 우리

난 당신의 코드에서 중요한 라인이 생각 :

objects  = UserManager() 
사용자 클래스 내

, 그래서 당신은

new_user=User.objects.create_user(args, args, args, etc) 

를 호출 할 필요가 새 사용자를 저장하기 위해는 "objects"는를 호출하는 항목입니다클래스에서 매니저라고 불린다 django

+0

왜이 방법이 나쁜지 대답 해주세요. – deathangel908