这让我发疯了。我确定我做错了什么,但我无法弄清楚是什么。我正在开发一个Django项目,我经常需要改变一些东西以更好地适应其他项目。
直到Django 1.6,没有问题。每当我想改变一些模型,字段,无论如何,我都这样做并运行syncdb。但是现在,通过迁移,syncdb只是迁移的别名,而且它很难实现智能化。你重命名这个字段了吗?你删除了那个字段吗?您必须指定默认值...您关心什么,这些只是测试数据。给他们打气,我会输入新的。尽管我的回答是诚实的,但我仍然得到“列不存在”,“数字不能被转换为hstore”,“十进制不是JSON可序列化”和其他奇迹。我想一旦项目投入生产,迁移肯定会有很大帮助。但是在我开发它的同时,请饶了我。 : - /
我尝试删除myapp/migrations
目录。我试着从psql中删除django_migrations
表。我再次尝试manage startapp myapp
。我试过了manage flush
。它暂时有效,但过了一段时间,该项目仍然以某种方式“记住”之前模型中的内容,并引发一阵发脾气。
请问,是否有任何正常的方式来说“只需删除所有表,重置所有数据,读取models.py,然后从中重新创建数据库”? syncdb用来工作的方式。
答案 0 :(得分:0)
要在现有数据库中进行更改,您必须使用迁移。
如果您在模型中进行更改而不想使用迁移,则有两种方法:
manage flush
不清除数据库和删除表,它只清除数据并在syncdb之后将DB返回到状态。
您应该编写makefile,它将删除数据库并再次创建它,然后是syncdb。
UPD: 您也可以使用https://docs.djangoproject.com/en/dev/ref/django-admin/#sqlclear-app-label-app-label