Django 1.7.1を使用してコマンドラインからcreate_superuserコマンドを呼び出そうとすると、エラーValueError: Users must have a valid username
が表示されます。私はUSERNAME_FIELDとして電子メールフィールドを持つカスタムユーザーモデルを作成するチュートリアルに従っています。それは私にユーザー名を要求するものではなく、python manage.py createsuperuser --username=someusername
とpython 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
ありがとうございました。それはそれをしたそのタイプミスでした。私はコピーと貼り付けが良いことになると思う。もう一度ありがとうございます。将来、フォーラムに投稿されているような愚かな間違いを防ぐために、私のコードをもっと詳しく調べるつもりです:)。 – Courtney