如果我更改模型的外键/其他关系,Django makemigrations工具将失败

问题描述 投票:0回答:2

我在Djang makemigrations /迁移工具方面遇到问题

  1. 我有一个带有外键的Employee员工表的退出模型。一切正常[]
  2. models.py

from django.contrib.auth.models import User

class Withdraw(models.Model):
    employee_id = models.ForeignKey(Employee, on_delete = models.PROTECT)
    amount = models.IntegerField(default=0)
    withdraw_date = models.DateTimeField(default=timezone.now)
    is_confirmed_by_employer = models.BooleanField(default=False)
  1. 我想更改它,并将用户作为用户的外键:

user = models.ForeignKey(User,on_delete = models.CASCADE)

  • 我正在运行makemigrations,但出现此错误消息:

  • 您正在尝试添加一个不可为空的字段'user',而没有默认值;我们无法做到这一点(数据库需要一些东西来填充现有行)。请选择一个修复程序:1)现在提供一次性的默认设置(将在所有现有行上设置此列的值为空)2)退出,然后让我在models.py中添加默认值

    1. 如果按1,那么我将收到以下消息,我实际上没有得到什么,为什么要把datetime或timezone.now放给用户?

      选择一个选项:1请输入有效的Python默认值datetime和django.utils.timezone模块可用,因此您可以执行例如时区输入“ exit”退出此提示

    1. 我尝试删除迁移文件夹并重新创建迁移文件,如在其他论坛帖子中所建议的那样。当我使用createmigrations Withdraw命令重新创建迁移并将其迁移到postgresSql时,不会创建Withdraw表,但是该工具正在编写该表已创建并迁移。

      无论哪种方式,我都无法将这一小更改迁移到数据库。您有什么意见吗?谢谢!

    我在Djang makemigrations /迁移工具上遇到问题,我有一个带有到Employee表的外键的Withdraw模型。一切正常,来自django.contrib.auth.models import的models.py ...

    python django postgresql migrate makemigrations
    2个回答
    0
    投票

    不添加默认值或将字段设置为空,需要填充所有现有条目。您只需使该字段可以为Null。

    user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
    

    0
    投票

    是的,这是自然行为。

    © www.soinside.com 2019 - 2024. All rights reserved.