Python Django-使用AbstractUser创建模型扩展用户模型时出错

Python Django-使用AbstractUser创建模型扩展用户模型时出错,python,django,Python,Django,我试图使用AbstractUser组件扩展用户模型。但我在这方面没有成功。在重新获取lot后,我编写了我的模型Employee(扩展用户模型),但现在我在执行syncdb时出现了以下错误 如果有人能帮我推荐或运行我的models.py,那就太好了。当我运行syncdb时,在我提供凭据后,它会询问超级用户创建,我得到一个以下错误 Error : (Complete traceback is pasted after the models.py) return Database.Cursor

我试图使用AbstractUser组件扩展用户模型。但我在这方面没有成功。在重新获取lot后,我编写了我的模型Employee(扩展用户模型),但现在我在执行syncdb时出现了以下错误

如果有人能帮我推荐或运行我的models.py,那就太好了。当我运行syncdb时,在我提供凭据后,它会询问超级用户创建,我得到一个以下错误

   Error : (Complete traceback is pasted after the models.py)

return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: epi_employee.emp_id may not be NULL



My models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings

# Create your models here.

class Employee(AbstractUser):
    emp_id = models.IntegerField('Employee Id', max_length=5,unique=True)
    dob = models.DateField('Date of Birth', null=True,blank=True)

    def __unicode__(self):
        return self.get_full_name


class Department(models.Model):
    name = models.CharField('Department Name',max_length=30, unique=True,default=0)
    def __unicode__(self):
        return self.name


class Report(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    dept = models.ForeignKey(Department, verbose_name="Department")
    report1 = models.ForeignKey(Employee,null=True,blank=True, verbose_name=u'Primary Supervisor',related_name='Primary')
    report2 = models.ForeignKey(Employee,null=True,blank=True, verbose_name=u'Secondary Supervisor',related_name='Secondary')

    def __unicode__(self):
        return self.user

def upload_to(instance, filename):
    return 'images/%s/%s' % (instance.user.username, filename)

class thumbnail((models.Model)):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    image = models.ImageField('Profile Pic',null=True, blank=True, upload_to=upload_to)

    def __unicode__(self):
        return self.user


class Passport(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    passport = models.CharField('Passport Number',max_length=15)
    passportissue = models.CharField('Issuing City',max_length=15, default='Bangalore')
    passportcountry = models.CharField('Issuing City',max_length=15, default='India')
    passportstart = models.DateField('Valid From', null=True,blank=True)
    passportend = models.DateField('Valid Till', null=True,blank=True)

    def __unicode__(self):
        return self.user


class CurrentAddress(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    address = models.TextField('Current Address')
    city = models.CharField('City', max_length=20, default = 'Bangalore')
    state = models.CharField('State', max_length=20, default= 'Karnataka')
    country = models.CharField('Country', max_length=20, default = 'India')
    mobile1 = models.IntegerField('Mobile1',max_length=12)
    mobile2 = models.IntegerField('Mobile2', null=True, blank=True,  max_length=12)
    landline = models.IntegerField('Land Line',null=True, blank=True,  max_length=12)
    email = models.EmailField('Personal Email Id', blank=True)

    def __unicode__(self):
        return self.user
完全回溯:请找到我得到的完整错误。如果需要更多信息,请告诉我

(testenv1) F:\djangoenv\testenv1\employee>python manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table django_content_type
Creating table django_session
Creating table epi_employee_groups
Creating table epi_employee_user_permissions
Creating table epi_employee
Creating table epi_department
Creating table epi_report
Creating table epi_thumbnail
Creating table epi_passport
Creating table epi_currentaddress

You just installed Django's auth system, which means you don't have any superuse
rs defined.
Would you like to create one now? (yes/no): yes
Username: admin
Email address: admin@admin.com
Password:
Password (again):
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\__init__.
py", line 399, in execute_from_command_line
    utility.execute()
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\__init__.
py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\base.py",
 line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\base.py",
 line 285, in execute
    output = self.handle(*args, **options)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\base.py",
 line 415, in handle
    return self.handle_noargs(**options)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\commands\
syncdb.py", line 112, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\sql.py",
line 216, in emit_post_sync_signal
    interactive=interactive, db=db)
  File "F:\djangoenv\testenv1\lib\site-packages\django\dispatch\dispatcher.py",
line 185, in send
    response = receiver(signal=self, sender=sender, **named)
  File "F:\djangoenv\testenv1\lib\site-packages\django\contrib\auth\management\_
_init__.py", line 126, in create_superuser
    call_command("createsuperuser", interactive=True, database=db)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\__init__.
py", line 159, in call_command
    return klass.execute(*args, **defaults)
  File "F:\djangoenv\testenv1\lib\site-packages\django\core\management\base.py",
 line 285, in execute
    output = self.handle(*args, **options)
  File "F:\djangoenv\testenv1\lib\site-packages\django\contrib\auth\management\c
ommands\createsuperuser.py", line 141, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user
_data)
  File "F:\djangoenv\testenv1\lib\site-packages\django\contrib\auth\models.py",
line 195, in create_superuser
    **extra_fields)
  File "F:\djangoenv\testenv1\lib\site-packages\django\contrib\auth\models.py",
line 186, in _create_user
    user.save(using=self._db)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\base.py", line
545, in save
    force_update=force_update, update_fields=update_fields)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\base.py", line
573, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, upda
te_fields)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\base.py", line
654, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\base.py", line
687, in _do_insert
    using=using, raw=raw)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\manager.py", li
ne 232, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\query.py", line
 1511, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\models\sql\compiler.py
", line 898, in execute_sql
    cursor.execute(sql, params)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\backends\util.py", lin
e 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\backends\util.py", lin
e 53, in execute
    return self.cursor.execute(sql, params)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\utils.py", line 99, in
 __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\backends\util.py", lin
e 53, in execute
    return self.cursor.execute(sql, params)
  File "F:\djangoenv\testenv1\lib\site-packages\django\db\backends\sqlite3\base.
py", line 450, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: epi_employee.emp_id may not be NULL
(testenv1)F:\djangoenv\testenv1\employee>python manage.py syncdb
正在创建表。。。
创建表django_admin_log
创建表auth\u权限
正在创建表身份验证组权限
创建表auth_组
创建表django_内容_类型
创建表django_会话
创建表epi_员工组
创建表epi\u员工\u用户\u权限
创建表epi_employee
创建表epi_部门
创建表epi_报告
创建表epi_缩略图
创建表epi_passport
创建表epi_currentaddress
您刚刚安装了Django的auth系统,这意味着您没有任何超级用户
定义了rs。
您想现在创建一个吗?(是/否):是
用户名:admin
电邮地址:admin@admin.com
密码:
密码(再次):
回溯(最近一次呼叫最后一次):
文件“manage.py”,第10行,在
从命令行(sys.argv)执行命令
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\\uuuu init\uuuu”。
py”,第399行,从命令行执行
utility.execute()
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\\uuuu init\uuuu”。
py”,执行中第392行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\base.py”,
第242行,从_argv运行_
self.execute(*args,**选项._dict__;
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\base.py”,
第285行,执行中
输出=self.handle(*args,**选项)
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\base.py”,
第415行,在手柄中
返回self.handle\u noargs(**选项)
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\commands\
syncdb.py”,第112行,在手柄中
发出后同步信号(创建的模型、冗余、交互、db)
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\sql.py”,
第216行,发射后同步信号
交互式=交互式,db=db)
文件“F:\djangoenv\testenv1\lib\site packages\django\dispatch\dispatcher.py”,
发送中的第185行
响应=接收方(信号=自身,发送方=发送方,**已命名)
文件“F:\djangoenv\testenv1\lib\site packages\django\contrib\auth\management\_
_创建超级用户中的第126行
调用_命令(“createsuperuser”,interactive=True,database=db)
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\\uuuu init\uuuu”。
py“,第159行,在call_命令中
返回klass.execute(*args,**默认值)
文件“F:\djangoenv\testenv1\lib\site packages\django\core\management\base.py”,
第285行,执行中
输出=self.handle(*args,**选项)
文件“F:\djangoenv\testenv1\lib\site packages\django\contrib\auth\management\c
ommands\createsuperuser.py”,第141行,在句柄中
self.UserModel.\u default\u manager.db\u manager(数据库)。创建超级用户(**user)
_(数据)
文件“F:\djangoenv\testenv1\lib\site packages\django\contrib\auth\models.py”,
第195行,在“创建超级用户”中
**额外字段)
文件“F:\djangoenv\testenv1\lib\site packages\django\contrib\auth\models.py”,
第186行,在“创建用户”中
user.save(使用=self.\u db)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\base.py”,第行
545,救命
强制更新=强制更新,更新字段=更新字段)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\base.py”,第行
573,在save_基地
更新=自我。保存表格(原始、cls、强制插入、强制更新、使用、upda
te_字段)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\base.py”,第行
654,在保存表中
结果=self.\u do\u insert(cls.\u base\u manager,using,fields,update\u pk,raw)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\base.py”,第行
687,插入
使用=使用,原始=原始)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\manager.py”,li
ne 232,插入式
返回insert_查询(self.model、objs、字段、**kwargs)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\query.py”,第行
1511,在insert_查询中
return query.get\u编译器(using=using).execute\u sql(return\u id)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\models\sql\compiler.py
,第898行,在execute_sql中
cursor.execute(sql,params)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\backends\util.py”,林
e 69,执行中
返回super(CursorDebugWrapper,self).execute(sql,params)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\backends\util.py”,林
e 53,执行中
返回self.cursor.execute(sql,params)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\utils.py”,第99行,在
__出口__
6.重新播放(dj_exc_类型、dj_exc_值、回溯)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\backends\util.py”,林
e 53,执行中
返回self.cursor.execute(sql,params)
文件“F:\djangoenv\testenv1\lib\site packages\django\db\backends\sqlite3\base。
py”,执行中第450行
返回Database.Cursor.execute(self、query、params)
django.db.utils.IntegrityError:epi_employee.emp_id不能为空

您定义了
emp\u id
唯一
,但不可为空

因此,当您创建超级用户时,django会提示
emp\u id
不能为空

如果要将其作为主键,请删除该字段。 如果以后需要定义,请将其放入emp_id字段
null=True

无论如何,您可以在这里阅读
self.get_full_name()
emp_id = models.AutoField(primary_key=True)
from django.contrib.auth.models import BaseUserManager


class EmployeManager(BaseUserManager):
    def create_user(self, username,  email,emp_id,  password=None):
        if not username:
            raise ValueError('Employers must have an username.')
        if not email:
            raise ValueError('Employers must have an email address.')
        if not emp_id:
            raise ValueError('Employers must have an employer id')
        user = self.model(username=username, email=self.normalize_email(email), emp_id=emp_id)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username,  email, emp_id, password):
        user = self.create_user(username,  email, emp_id, password)
        user.is_admin = True
        user.is_superuser = True
        user.save(using=self._db)
        return user
from myapp.managers import EmployeManager
objects = EmployeManager()