【问题标题】:You are trying to change the nullable field 'email' on customuser to non-nullable without a default您正在尝试将 customuser 上的可为空字段“电子邮件”更改为不可为空而没有默认值
【发布时间】:2022-01-10 08:34:24
【问题描述】:

我的 models.py 中有两个模型(UserAddress 和 CustomUser),CustomUser 中的字段用户地址是多对多字段,但我决定将其更改为外键字段。但是当我运行 python manage.py make migrations 时,它要求我选择一个选项:

我该怎么办: 您正在尝试将 customuser 上的可为空字段“电子邮件”更改为不可为空,而没有默认值;我们不能那样做(数据库需要一些东西来填充 exis 亭行)。 请选择一个修复:

  1. 现在提供一次性默认值(将在所有现有行上设置此列的空值)
  2. 暂时忽略,让我自己处理带有 NULL 的现有行(例如,因为您添加了 RunPython 或 RunSQL 操作来处理先前数据中的 NULL 值 迁移)
  3. 退出,让我在 models.py 中添加一个默认值

这是我的 models.py 文件:

class UserAddress(models.Model):
    city = models.CharField(max_length=100)
    address = models.CharField(max_length=200)
    zip_code = models.CharField(max_length=15, blank=True)

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


class CustomUser(AbstractUser):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    user_address = models.ForeignKey(UserAddress, on_delete=models.CASCADE)

【问题讨论】:

  • 尝试删除旧的迁移和数据库
  • 但是我的数据很多,除了删除没有办法吗? @dabdya
  • 由于模型已经改变,正如它在管理输出中所写的那样,“数据库需要一些东西来填充现有的行。”这通常发生在开发过程中模型发生变化时,这种情况下删除数据并不可惜。另一种选择是在邮件字段中设置默认值

标签: django django-models makemigrations


【解决方案1】:
class CustomUser(AbstractUser):
   email = models.EmailField(unique=True ,null =True)
  # your other fields

运行python manage.py makemigrationspython manage.py migrate 命令。错误将被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2020-06-03
    • 2020-07-12
    • 1970-01-01
    • 2016-05-09
    • 2018-02-13
    • 2021-08-25
    相关资源
    最近更新 更多