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

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

当我对我的模型进行移动时,终端会发出警告:“你正在尝试添加一个不可空的字段等”,并要求提供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文件----最后一个文件关注我 - 我认为这是bc我必须点击选项2.我只是希望能够制作色彩,如果删除重要文件,我会担心我的模型不能正常工作。

models.朋友

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)
django model migration
1个回答
0
投票

运行makemigrations对数据库没有任何作用,因此如果你没有运行migrate,你可以轻松地取回任何东西。 makemigrations所做的就是创建一个文件。如果您不喜欢它,请将其删除。当它给你关于非可空字段的错误时,选项非常明确。请阅读它们:

您试图在没有默认值的情况下向条形添加不可为空的字段'foo';我们不能那样做(数据库需要一些东西来填充现有的行)。 请选择一个修复: 1)现在提供一次性默认值(将在此列的所有现有行上设置为空值) 2)退出,让我在models.py中添加默认值 选择一个选项:

如果选择(1),cli将提示您提交默认值。在你这样做之后,它清楚地告诉你它已经创建了一个文件,并告诉你名字。

如果选择(2),则没有任何反应。他们会让你解决问题,你可以在模型中通过使字段可以为空(在字段定义中添加null=True)或给它一个默认值(default=...)来解决问题。

我建议你看看这些文件,以确保你明白他们在做什么。这一切都很简单。其中任何尚未运行的都可以更改。您可以直接编辑它们,也可以删除并重新生成它们。

要查看已运行的那些,请使用showmigrations

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