2013-11-16 2 views
0

Я пытаюсь работать с учебниками для пользовательского менеджера Django. Большинство из них переопределения CREATE_USER() и create_super_user(), как говорится в документации, чтобы сделать, но этот учебник оставляет эти два метода один и вместо переопределяет _create_user()В пользовательском пользовательском менеджере Django разница между create_user и _create_user()?

http://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/

Правильно ли это? В чем разница между переопределением _create_user() и create_user()?

ответ

1

Вот как код метода _create_user, create_super_user и create_user.

def _create_user(self, username, email, password, 
       is_staff, is_superuser, **extra_fields): 
    """ 
    Creates and saves a User with the given username, email and password. 
    """ 
    now = timezone.now() 
    if not username: 
     raise ValueError('The given username must be set') 
    email = self.normalize_email(email) 
    user = self.model(username=username, email=email, 
         is_staff=is_staff, is_active=True, 
         is_superuser=is_superuser, last_login=now, 
         date_joined=now, **extra_fields) 
    user.set_password(password) 
    user.save(using=self._db) 
    return user 

def create_user(self, username, email=None, password=None, **extra_fields): 
    return self._create_user(username, email, password, False, False, 
          **extra_fields) 

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

Как вы можете видеть, что create_user и create_super_user метод вызова функции _create_user. Подчеркивание в начале метода означает, что функция предназначена только для внутреннего использования. Хорошо переопределить внутренний метод, но, по моему мнению, лучше по дизайну переопределить общедоступный метод.

Смежные вопросы