Ich erhalte einen Fehler ValueError: Users must have a valid username
beim Versuch, den create_superuser Befehl von der Kommandozeile mit Django 1.7.1 aufzurufen. Ich folge einem Tutorial, das ein benutzerdefiniertes Benutzermodell mit dem E-Mail-Feld als USERNAME_FIELD erstellt. Es fragt mich nicht nach einem Benutzernamen und ich habe versucht, den Benutzernamen als Option mit python manage.py createsuperuser --username=someusername
und python manage.py createsuperuser username=someusername
zu übergeben. Ausschnitte meines Codes sind unten.Python create_user Fehler
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
In der settings.py Datei habe ich die Authentifizierung auf die Liste der installierten Anwendungen hinzugefügt und ich habe definiert AUTH_USER_MODEL als authentication.Account
Vielen Dank. Es war dieser Tippfehler, der das getan hat. Ich denke, das ist, wenn Kopieren und Einfügen eine gute Sache sein kann. Nochmals vielen Dank und in der Zukunft werde ich versuchen, meinen Code viel mehr zu hinterfragen, um zu verhindern, dass dumme Fehler wie diese im Forum gepostet werden :). – Courtney