2016-03-27 24 views
0

Django 1.7.1 kullanarak komut satırından create_superuser komutunu çağırmaya çalışırken ValueError: Users must have a valid username hata alıyorum. E-posta alanına USERNAME_FIELD ile özel bir Kullanıcı modeli oluşturan bir eğiticiyi takip ediyorum. Bir kullanıcı adı için bana sormuyor ve kullanıcı adı python manage.py createsuperuser --username=someusername ve python manage.py createsuperuser username=someusername ile bir seçenek olarak geçmeyi denedim. Kodumun snippetleri aşağıda. settings.py dosyasında models.pyPython create_user hatası

# Create your models here. 
from django.contrib.auth.models import AbstractBaseUser 
from django.db import models 
from django.contrib.auth.models import BaseUserManager 

class AccountManager(BaseUserManager): 
    def create_user(self, email, password=None, **kwargs): 
     if not email: 
      raise ValueError('Users must have a valid email address.') 

     if not kwargs.get('username'): 
      raise ValueError('Users must have a valid username') 

     account = self.model(
      email=self.normalize_email(email), username=kwargs.get('username') 
     ) 

     account.set_password(password) 
     account.save() 

     return account 

    def create_superuser(self, email, password, **kwargs): 
     account = self.create_user(email, password, **kwargs) 

     account.is_admin = True 
     account.save() 

     return account 

class Account(AbstractBaseUser): 
    """docstring for Account""" 
    email = models.EmailField(unique=True) 
    username = models.CharField(max_length=40, unique=True) 

    first_name = models.CharField(max_length=40, unique=True) 
    last_name = models.CharField(max_length=40, unique=True) 
    tagline = models.CharField(max_length=140, unique=True) 

    is_admin = models.BooleanField(default=False) 

    created_at = models.DateTimeField(auto_now_add=True) 
    modified_at = models.DateTimeField(auto_now=True) 

    objects = AccountManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELD = ['username'] 

    def __unicode__(self): 
     return self.email 

    def get_full_name(self): 
     return ' ' . join([self.first_name, self.last_name]) 

    def get_short_name(self): 
     return self.first_name 

, ben yüklü uygulamalar listesine kimlik eklemiş ve ben authentication.Account

olarak

cevap

1

AUTH_USER_MODEL tanımlanan yerine REQUIRED_FIELDS Kümeniz REQUIRED_FIELD. Bu, createsuperuser'un isteyeceği alan adlarının listesidir. Özel kullanıcı modelinizin null olmayan/boş bırakılamaz olan tüm alanlarını içermesi gerekir. Bu durumda, first_name, last_name ve tagline da dahil olmak isteyebilirsiniz. Bu, well-documented numaralı belgedir.

+0

Çok teşekkür ederim. Yaptığı yazım hatasıydı. Kopyala ve yapıştırın iyi bir şey olabileceğini sanırım. Tekrar teşekkürler ve gelecekte forumda yayınlanmakta olduğu gibi aptalca hataları önlemek için kodumu çok daha fazla incelemeye çalışacağım :). – Courtney