2016-03-27 4 views
0

Django 1.7.1を使用してコマンドラインからcreate_superuserコマンドを呼び出そうとすると、エラーValueError: Users must have a valid usernameが表示されます。私はUSERNAME_FIELDとして電子メールフィールドを持つカスタムユーザーモデルを作成するチュートリアルに従っています。それは私にユーザー名を要求するものではなく、python manage.py createsuperuser --username=someusernamepython manage.py createsuperuser username=someusernameというオプションでユーザー名を渡そうとしました。私のコードのスニペットは以下の通りです。 settings.pyファイルでPython create_userエラー

models.py

# 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 

、私は、インストールされたアプリのリストに認証を追加していると私はセットREQUIRED_FIELDS authentication.Account

答えて

1

としてAUTH_USER_MODELを定義している代わりに、 REQUIRED_FIELD。これはcreatesuperuserがプロンプトを表示するフィールド名のリストです。カスタムユーザーモデルのすべてのフィールドには、ヌル入力可能/非入力可能でないフィールドが含まれている必要があります。したがって、first_namelast_name、およびtaglineも含めることができます。

これはwell-documentedです。

+0

ありがとうございました。それはそれをしたそのタイプミスでした。私はコピーと貼り付けが良いことになると思う。もう一度ありがとうございます。将来、フォーラムに投稿されているような愚かな間違いを防ぐために、私のコードをもっと詳しく調べるつもりです:)。 – Courtney