2017-11-21 9 views
1

내 자신의 사용자 모델 및 usermanager 모델을 작성했습니다. 그런 다음 수퍼 유저를 만들고 "수퍼 유저가 성공적으로 생성되었습니다." 그러나 모든 정보를 사용하여 로그인하려고 시도했지만 실패했습니다. 그런 다음 암호를 작성하는 동안 한 줄의 코드를 추가하여 작성했습니다. 내가 필요한 분야에서 일 개 필요 필드를 제거하면django - 사용자 정의 사용자 모델을 작성한 후 로그인 할 수 없습니다.

  1. 필요한 필드 내 코드
  2. 에 따라 변화 내가 얻을 : 내 password.I이 때문에 서버가 사용자 정의 모델을 사용하고 확신과 결과는 일치 기대된다 "TypeError: create_superuser() missing 1 required positional argument:"에 대한 오류, 내가 데이터베이스에서 사용자를 얻을 수 .count() 메소드를 사용
  3. 올바른 방법으로 내가 한
을 만든 후 내가 1 양의 증가를 볼 수 있도록

내 코드는 다음과 같습니다.

class UserManager(BaseUserManager): 
    def create_user(self, username,email,password=None): 
     if not email: 
      raise ValueError("Users must have an email address") 
     if not password: 
      raise ValueError("Users must have a password") 
     user_obj = self.model(
      email=self.normalize_email(email) 
     ) 
     user_obj.set_password(password) 
     user_obj.username = username 
     user_obj.save(using=self.db) 
     return user_obj 

    def create_superuser(self, username, email, password): 
     print("Super user created, with password" + password) 
     return self.create_user(
      username=username, 
      email=email, 
      password=password, 
     ) 

class User(AbstractBaseUser): 
    username = models.CharField(max_length=255, unique=True) 
    email = models.EmailField(blank=True, unique=True) 
    created_time = models.TimeField(auto_now=True) 
    active = models.BooleanField(default=False) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username'] 
    objects = UserManager() 

아무도 내게 아이디어를 줄 수 있다면 정말 고마워. 완전히 길을 잃는다.

답변

1

난 당신이 변화해야한다고 생각 :

def create_superuser(self, username, email, password): 

에 : **extra_fields의 매개 변수 _create_user 또한 create_user의 기능에 필요하기 때문에

def create_superuser(self, username, email, password, **extra_fields): 
    .... 
    return self._create_user(username, email, password, **extra_fields) 

, 당신은 this source에서 체크 아웃 할 수 있습니다.

def _create_user(self, username, email, password, **extra_fields): 
    .... 

def create_user(self, username, email=None, password=None, **extra_fields): 
    .... 
+0

그 배열을 extra_fields입니다시겠습니까? –

+0

그리고 입력란에 사용자 이름, 이메일, 비밀번호 입력란을 포함시키지 않으시겠습니까? 그들은 필요하기 때문에? –

+0

아니, 여기에 [이해 파이썬에서 kwargs] (https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python) ... 나는 당신이 [소스] (https : // github .com/django/django/blob/master/django/contrib/auth/models.py # L134-L161)를 사용하여'extra_fields'가 필요한 이유를 확인하십시오. –

0

이 상황에 대한 해결책은 is_superuser 및 is_staff을 설정 True로, 다음 프로그램은 관리자 사이트에 액세스 할 수있는 계정 권한