Django模型迁移:错误-尝试添加不可为空的字段

时间:2019-04-26 22:39:02

标签: django model migration

当我向模型进行迁移时,终端会发出以下警告:“您正在尝试添加不可为空的字段,等等”,并要求提供2个选项。我必须进行了7次迁移-是否应该删除“ 0001_initial.py”,“ 0002_auto文件”以及db.sqlite3?我不需要保留输入的数据库信息,因为我仅进行了测试以查看模型是否正常工作-我只是想确保自己不删除数据库本身,因此可以进一步测试模型以查看如果他们在工作。有人可以验证我需要删除的特定文件以便进行迁移吗?非常感谢您的帮助!

到目前为止,我的迁移文件夹如下所示:001_initial.py,0002_auto文件,0003_auto文件,0004_auto_file,0005_auto_file,0006_auto文件以及最后007_order_buyers文件-最后一个文件与我有关-我认为这是我必须单击了选项2。我只希望能够进行迁移,并且我对删除重要文件后模型无法使用保持警惕。

models.py

class User(models.Model):
    first_name=models.CharField(max_length=100)
    last_name=models.CharField(max_length=100)
    email=models.CharField(max_length=100)
    password=models.CharField(max_length=100)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

class Order(models.Model):
    full_name=models.CharField(max_length=100)
    cc_number=models.PositiveIntegerField()
    exp_date=models.PositiveIntegerField()
    cvc=models.PositiveIntegerField()
    buyer=models.ForeignKey(User, related_name="bought_tickets", on_delete=models.PROTECT)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

class Ticket(models.Model):
    venue=models.CharField(max_length=100)
    quantity=models.PositiveIntegerField()
    price=models.DecimalField(default=25.00, max_digits=5, decimal_places=2, null=True, blank=True)
    loop=models.CharField(max_length=100)
    purchaser = models.ForeignKey(User, related_name="purchases", on_delete=models.PROTECT)
    order=models.ForeignKey(Order, related_name="orders", on_delete=models.PROTECT)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

1 个答案:

答案 0 :(得分:0)

运行makemigrations对数据库没有任何作用,因此如果您没有运行migrate,则可以轻松撤消任何内容。 makemigrations所做的只是创建一个文件。如果您不喜欢它,请将其删除。当它给您有关不可为空的字段的错误时,这些选项非常明确。只需阅读它们即可:

  

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

如果选择(1),则cli接下来将提示您提交默认值。完成后,它会清楚地告诉您它已创建了一个文件,并告诉您名称。

如果选择(2),则什么都不会发生。他们让您自己解决问题,您可以在模型中通过使字段可为空(在字段定义中添加null=True或为其设置默认值(default=...)来解决此问题。

我建议您查看那些文件,以确保您了解它们在做什么。这一切都非常简单。任何尚未运行的都可以更改。您可以直接编辑它们,也可以删除它们并重新生成它们。

要查看已运行的程序,请使用showmigrations