Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 非空约束失败:users\u user.email_Python_Django_Django Rest Framework - Fatal编程技术网

Python 非空约束失败:users\u user.email

Python 非空约束失败:users\u user.email,python,django,django-rest-framework,Python,Django,Django Rest Framework,我刚刚创建了一个自定义用户模型和一个自定义用户管理器。我可以使用manage.py createsuperuser创建超级用户,但是当涉及到在管理面板上更新、删除甚至创建新用户时,我出现以下wierd错误: 非空约束失败:users\u user.email 我不知道如何修复它,我只是被卡住了。这是我的模特和我的经理: class UserManager(BaseUserManager): #custom create_user method def create_user(se

我刚刚创建了一个自定义用户模型和一个自定义用户管理器。我可以使用manage.py createsuperuser创建超级用户,但是当涉及到在管理面板上更新、删除甚至创建新用户时,我出现以下wierd错误:

非空约束失败:users\u user.email

我不知道如何修复它,我只是被卡住了。这是我的模特和我的经理:

class UserManager(BaseUserManager):
    #custom create_user method
    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email = self.normalize_email(email)
        )
        print(email)
        user.set_password(password)
        user.save(using=self._db)
        print(user)
        return user

    #Custom create_super_user method
    def create_superuser(self, email, password=None):
        user = self.create_user(
            email = email,
            password = password
        )
        user.admin = True
        user.is_superuser = True
        user.is_staff = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    #setting up Choices for interest, Must add other fields ...
    #interests = MultiSelectField(
    #    max_length = 2,
    #    choices = INTERESTS_CHOICES
    #)


    #Setting up a Ranking System

    email = models.EmailField(
        max_length=50,
        unique=True,
        blank=False,
        null=False
    )
    username = models.CharField(
        max_length=25,
        unique=True,
        null=True,
        blank=True
    )
    date_joined = models.DateTimeField(auto_now_add=True)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=70)
    birth_date = models.DateField(null=True, blank=True)
    reputation = models.PositiveIntegerField(default=0)
    active = models.BooleanField(default=True)
    rank = models.CharField(choices=RANKING_CHOICES, max_length=5, default="basic")
    is_staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    bio = models.TextField(
        max_length=300,
        default="default Bio",
        blank=True
    )
    objects = UserManager()
    #Setting email to be the main source of authentication
    USERNAME_FIELD = 'email'

    #Super User Only
    REQUIRED_FIELDS = ['password']

    #def get_absolute_url(self):
        #use reverse + nom de l'url de view

    def __str__(self):
        return str(self.email)

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def get_short_name(self):
        return self.first_name

    def get_username(self):
        return self.username

    def set_user_league(self):
        if 15 <= self.reputation < 40:
            self.rank = "gold"
        elif 40 <= self.reputation < 80:
            self.rank = "platinium"
        else:
            self.rank = "diamond"

    @property
    def is_admin(self):
        print(f" is {self.email} admin ? ")
        return self.admin

    def has_perm(self, obj=None):
        return True

    def has_module_perms(self, obj=None):
        return True
类用户管理器(BaseUserManager):
#自定义创建用户方法
def create_用户(自我、电子邮件、密码=无):
如果不是电子邮件:
raise VALUERROR('用户必须有电子邮件地址')
user=self.model(
电子邮件=自我规范化电子邮件(电子邮件)
)
打印(电子邮件)
user.set_密码(password)
user.save(使用=self.\u db)
打印(用户)
返回用户
#自定义创建超级用户方法
def create_超级用户(自我、电子邮件、密码=无):
user=self.create\u用户(
电子邮件=电子邮件,
密码=密码
)
user.admin=True
user.is_superuser=True
user.is_staff=True
user.save(使用=self.\u db)
返回用户
类用户(AbstractBaseUser):
#设置感兴趣的选项时,必须添加其他字段。。。
#兴趣=多选字段(
#最大长度=2,
#选择=兴趣\选择
#)
#建立排名制度
email=models.EmailField(
最大长度=50,
唯一=正确,
空白=假,
空=假
)
用户名=models.CharField(
最大长度=25,
唯一=正确,
空=真,
空白=真
)
date\u joined=models.DateTimeField(自动\u now\u add=True)
first_name=models.CharField(最大长度=50)
last_name=models.CharField(最大长度=70)
出生日期=models.DateField(null=True,blank=True)
声誉=模型。正积分字段(默认值=0)
active=models.BooleanField(默认值=True)
rank=models.CharField(选项=RANKING\u选项,最大长度=5,default=“basic”)
is_staff=models.BooleanField(默认值=False)
admin=models.BooleanField(默认值=False)
is_superuser=models.BooleanField(默认值=False)
bio=models.TextField(
最大长度=300,
default=“default Bio”,
空白=真
)
objects=UserManager()
#将电子邮件设置为身份验证的主要来源
用户名\字段='电子邮件'
#仅限超级用户
必填字段=['password']
#def get_绝对_url(自身):
#使用reverse+nom de l'url de view
定义(自我):
返回str(self.email)
def get_全名(自我):
返回f“{self.first_name}{self.last_name}”
def get_short_名称(自我):
返回self.first\u name
def get_用户名(自我):
返回self.username
def设置用户联盟(自我):

如果15将您的模型作为与用户模型的一对一关系。然后用
null=True

重写电子邮件字段
email
的值是多少?您打印它,所以它可能会打印一些东西?在创建用户时,似乎连create\u user都没有调用。在运行makemigrations和migrate之后,当更新现有用户电子邮件时,我看不到我的任何printswell:/我想创建自己的用户模型。我不想使用onetoone字段,所以在抽象类中重写它
email=models.EmailField(null=True,max_length=255)
但这是我的主要身份验证来源您是否在管理面板中注册了修改后的用户模型?为什么您不从头开始编写自己的模型,不使用django用户模型?