django1.5 自定义User模块后执行 syncdb 总是报错 TypeError: create_superuser() takes exactly 4 arguments (3 given)
源码如下:
# coding: utf8
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
# Create your models here.
class PassportManager(BaseUserManager):
def create_user(self, email, alias, password=None):
# create_user()参数必须是USERNAME_FIELD 和 所有的REQUIRED_FIELD
if not email:
raise ValueError('用户必须输入Email地址')
user = self.model(
email = PassportManager.normalize_email(email),
alias = alias,
# is_staff = False,
# is_active = True,
# is_superuser = False
)
user.set_password(password)
user.save(using = self._db)
return user
def create_superuser(self, email, alias, password):
# 创建超级用户,一般来说可以直接调用create_user方法,然后设置管理员相关属性,
user = self.create_user(
email = email,
alias = alias,
password = password
)
user.is_admin = True
# is_admin = True 等同于以下:
# user.is_staff = True
# user.is_active = True
# user.is_superuser = True
user.save(using = self._db)
return user
class Passport(AbstractBaseUser):
email = models.EmailField(max_length=254, unique=True, db_index=True)
alias = models.CharField(max_length=60)
is_active = models.BooleanField('active', default=True)
is_admin = models.BooleanField('staff status', default=False, help_text='flag for log into admin site.')
avatar = models.ImageField(upload_to='avatar', max_length=255)
bio = models.CharField(max_length=255)
GENRE_CHOICES = (
(1, '摄影师'),
(2, '插画师'),
(3, '原画师'),
(4, '平面设计师'),
(5, '品牌顾问'),
(6, '其他'),
)
genre = models.SmallIntegerField(choices=GENRE_CHOICES)
site_dribbble = models.URLField(blank=True, verbose_name=u'Dribbble')
site_deviantart = models.URLField(blank=True, verbose_name=u'DeviantART')
site_benhance = models.URLField(blank=True, verbose_name=u'Benhance')
site_tumblr = models.URLField(blank=True, verbose_name=u'Tumblr')
site_zcool = models.URLField(blank=True, verbose_name=u'站酷')
site_blog = models.URLField(blank=True, verbose_name=u'博客')
site_sina = models.URLField(blank=True, verbose_name=u'新浪微博')
# 用于登录的字段
USERNAME_FIELD = 'email'
# REQUIRED_FIELDS must contain all required fields on your User model,
# but should not contain the USERNAME_FIELD or password as these fields
# will always be prompted for.
REQUIRED_FIELD = ['alias']
objects = PassportManager()
def get_full_name(self):
return self.alias
def get_short_name(self):
return self.alias
def __unicode__(self):
return self.alias
@property
def is_staff(self):
# Is the user a member of staff?
# Simplest possible answer: All admins are staff
return self.is_admin
Google 上有一些提问,但是好像全部都是集中在 REQUIRED_FIELD = ['']
的问题,然后我逐一检查了下,以我的理解应该是没有问题的了...
http://python.6.x6.nabble.com/Syncdb-error-with-new-1-5rc1-td5001568.html
https://groups.google.com/d/topic/django-users/RnPEUEAvvE0
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...