在开发模型时,我经常在运行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)
答案 0 :(得分:3)
即使您删除了该表中的所有记录,在运行makemigrations
时,系统也会要求您再次提供默认值。这是因为您正在为现有表格制作新的迁移文件。
我能想到的一个解决方案是告诉Django您通过运行app_name
重新启动migrate app_name zero
。这将取消应用已应用于您的数据库的所有迁移文件。
然后删除app_name
中的所有迁移文件。然后再次运行makemigrations
。这将创建一个新的初始迁移文件。然后,您只需使用migrate
将其应用于数据库。
正如您所说,您不介意删除您的数据。这甚至更好。你甚至不必删除任何记录。它只会创建一个具有相同名称的新表,包含所有新字段和0记录。