Python Django在频繁修改模型时的工作流程?
由于我通常不会在Django项目中预先设计模型,因此每次都会大量修改模型并删除测试数据库(因为“syncdb”永远不会自动为您更改表)。下面是我的工作流程,我想听听你的。欢迎有任何想法Python Django在频繁修改模型时的工作流程?,python,django,django-models,workflow,django-syncdb,Python,Django,Django Models,Workflow,Django Syncdb,由于我通常不会在Django项目中预先设计模型,因此每次都会大量修改模型并删除测试数据库(因为“syncdb”永远不会自动为您更改表)。下面是我的工作流程,我想听听你的。欢迎有任何想法 修改模型 删除测试数据库。(对我来说,总是一个简单的sqlite数据库。) 运行“syncdb” 通过代码生成一些测试数据 转到1 关于这一点的第二个问题。。如果您的工作流程与上述类似,您将如何执行4。步您是手动生成测试数据,还是在Django应用程序中有一个合适的钩子点,可以在服务器启动时注入测试数据生成代码\
TIA。步骤2和3可以一步完成:
manage.py reset appname
根据我的理解,第4步是最容易管理的,使用这是Django的设备的工作。它们很方便,因为它们是独立于数据库的,并且测试工具(和manage.py)具有对它们的内置支持 要使用它们:
python manage.py dumpdata--indent=4 foo>foo/fixtures/foo.json
python manage.py loaddata foo.json
您的数据将被重新创建
如果要在测试用例中使用它们:
class FooTests(TestCase):
fixtures = ['foo.json']
请注意,如果您的模式发生剧烈变化,您将不得不重新创建或手动更新您的装置
您可以在django文档中阅读更多关于装置的信息,这里是我们的工作
appb_1
等def migrate_appa_2_to_3():
for a in appa_2.SomeThing.objects.all():
appa_3.AnotherThing.create( a.this, a.that )
appa_3.NewThing.create( a.another, a.yetAnother )
for b in ...
关键是,删除并重新创建并不总是合适的。有时,将数据从旧模型移动到新模型而无需从头开始重建是很有帮助的。为了补充Matthew的回答,我还经常使用自定义SQL提供文档中的初始数据
Django只是在
/sql/.sql
中查找文件,并在syncdb
或sqlreset
期间创建表后运行它们。当我需要从其他非Django数据库表中填充Django表时,我会使用自定义SQL。就我个人而言,我的开发数据库用于我现在正在处理的项目,它相当大,因此我使用创建数据库迁移脚本来修改数据库(而不是像我开始时那样每次都删除数据库)
编辑:事实上,我现在用的是南方:-)南方最酷
虽然当数据不重要时,良好的ol'重置效果最好
别忘了使用
manage.py dumpdata app>app.json
备份您所拥有的。洛特——除非我误解了你的意思,否则我的第三步不包括这些吗?@Matthew Christensen:谢谢,但我更喜欢“懒惰”而不是“聪明”。我喜欢尽可能减少中断,并以最少或不“思考”的方式后退。您是否在已安装的应用程序中保留以前的版本?@muhunk:我们会根据需要替换设置和url.py。是的,之前的版本已经存在了一段时间,直到我们确定我们再也不会回去。@S.Lott:是muhuk,不是muhunk。我很想了解这种方法的细节。我认为这将是一篇很棒的文章。@muhuk:抱歉。更糟糕的是,除了删除注释外,没有简单的方法可以编辑注释。如果您的model.py代码已经做了一些更改,则此方法不起作用。要求它们与数据库同步。