2015-01-18 3 views
0

사용자 정의 BaseUserManagerAbstractBaseUser이 있습니다. 요구 사항이 동일하므로 create_user 함수를 AbstractBaseUser에 다시 superuser 코드로 재사용하고 싶습니다.create_superuser에서 create_user 코드를 다시 사용하는 방법은 무엇입니까?

내가 이해에서

, 나는 create_user 바로 이상 create_superuser에 전달 된 인수를 전달하고 로컬 함수 내에서, Trueis_admin을 변경 한 다음 반환 있음을 절약 할 수있다. 그렇게하면 많은 코드를 재활용하고 깨끗하게 유지할 수 있습니다. 이것이 올바른 접근 방법입니까? 동일한 사용자에 한 번 create_user에 한 번 create_superuser에서 두 번 user.save(using=self._db) 전화가 안전한지

def create_superuser(self, email, var2, var3, var4, etc...): 
    user = create_user(email, var2, var3, var4, etc...) 
    user.is_admin = True 
    user.save(using=self._db) 
    return user 

나는 대부분 궁금하네요? 방법 Django did it을 살펴보면

+0

이미'create_superuser'가 있습니다 - https://docs.djangoproject.com/en/1.7/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_superuser 왜 다시 만드시겠습니까? – karthikr

+0

'BaseUserManager'에서 제외하려고했지만 고객 관리자에게 구현하려고했습니다 ... – User

답변

1

:

class MyCustomUserManager(models.Manager): 
    def _create_user(self, email, is_staff, is_superuser, ...): 
     ... 

    def create_user(self, email, ...): 
     return self._create_user(email, False, False, ...) 

    def create_superuser(self, email, ...): 
     return self._create_user(email, True, True, ...) 

이 추가 코드 및 데이터베이스 액세스를 모두 최소화 할 수 있습니다. 사용자를 두 번 저장하는 데 특별히 잘못된 것은 없지만 전혀 필요하지 않습니다.

+0

코드를 확인하고 오류가 발생했습니다. 'TypeError : _create_user()가 정확히 12 개의 인수를가집니다.)'. 매개 변수 ('def' 행)에는 self가 포함되고 인수 ('return' 행)는 포함되지 않습니다. 나는 왜 내가 그것을 얻고 있는지 이해하지 못한다. – User

+0

@ 사용자 '관리자'를 게시 할 수 있습니까? – knbk

관련 문제