当我向模型进行迁移时,终端会发出以下警告:“您正在尝试添加不可为空的字段,等等”,并要求提供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)
答案 0 :(得分:0)
运行makemigrations
对数据库没有任何作用,因此如果您没有运行migrate
,则可以轻松撤消任何内容。 makemigrations
所做的只是创建一个文件。如果您不喜欢它,请将其删除。当它给您有关不可为空的字段的错误时,这些选项非常明确。只需阅读它们即可:
您正试图在bar中添加不可为空的字段'foo',而没有默认值;我们无法做到这一点(数据库需要一些东西来填充现有行)。
请选择一个修复程序:
1)现在提供一次性的默认值(将在所有现有行上设置此列的值为空)
2)退出,然后让我在models.py中添加默认值
选择一个选项:
如果选择(1),则cli接下来将提示您提交默认值。完成后,它会清楚地告诉您它已创建了一个文件,并告诉您名称。
如果选择(2),则什么都不会发生。他们让您自己解决问题,您可以在模型中通过使字段可为空(在字段定义中添加null=True
或为其设置默认值(default=...
)来解决此问题。
我建议您查看那些文件,以确保您了解它们在做什么。这一切都非常简单。任何尚未运行的都可以更改。您可以直接编辑它们,也可以删除它们并重新生成它们。
要查看已运行的程序,请使用showmigrations。