Django:快速处理添加不可空字段

时间:2016-02-12 14:18:41

标签: python django django-models

在开发模型时,我经常在运行makemigrations时遇到不可为空的字段错误:

You are trying to add a non-nullable field 'user' to randommodel without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py
Select an option: 

几乎所有的时候,当我收到此错误时,我很乐意删除该表中的数据(通常在开发时通常只有几个测试条目)并且删除它而不是确定什么更有效合适的默认值是。

但是目前我没有一个合适的方法来执行此操作并最终刷新数据库和/或删除迁移,这很复杂但有效。

删除该模型/表中的数据以删除错误的最佳方法是什么? (它是通过shell / shell_plus吗?)

型号:

class RandomModel(models.Model):
    user_details = JSONField(unique=True)
    user = models.ForeignKey(User)

1 个答案:

答案 0 :(得分:3)

即使您删除了该表中的所有记录,在运行makemigrations时,系统也会要求您再次提供默认值。这是因为您正在为现有表格制作新的迁移文件。

我能想到的一个解决方案是告诉Django您通过运行app_name重新启动migrate app_name zero。这将取消应用已应用于您的数据库的所有迁移文件。

然后删除app_name中的所有迁移文件。然后再次运行makemigrations。这将创建一个新的初始迁移文件。然后,您只需使用migrate将其应用于数据库。

正如您所说,您不介意删除您的数据。这甚至更好。你甚至不必删除任何记录。它只会创建一个具有相同名称的新表,包含所有新字段和0记录。