python - django1.5 自定义User模块后执行 syncdb 总是报错 TypeError: create_superuser() takes exactly 4 arguments (3 given)
高洛峰
高洛峰 2017-04-17 11:58:41
[Python讨论组]

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号