Python Django在频繁修改模型时的工作流程?

Python Django在频繁修改模型时的工作流程?,python,django,django-models,workflow,django-syncdb,Python,Django,Django Models,Workflow,Django Syncdb,由于我通常不会在Django项目中预先设计模型,因此每次都会大量修改模型并删除测试数据库(因为“syncdb”永远不会自动为您更改表)。下面是我的工作流程,我想听听你的。欢迎有任何想法 修改模型 删除测试数据库。(对我来说,总是一个简单的sqlite数据库。) 运行“syncdb” 通过代码生成一些测试数据 转到1 关于这一点的第二个问题。。如果您的工作流程与上述类似,您将如何执行4。步您是手动生成测试数据,还是在Django应用程序中有一个合适的钩子点,可以在服务器启动时注入测试数据生成代码\

由于我通常不会在Django项目中预先设计模型,因此每次都会大量修改模型并删除测试数据库(因为“syncdb”永远不会自动为您更改表)。下面是我的工作流程,我想听听你的。欢迎有任何想法

  • 修改模型
  • 删除测试数据库。(对我来说,总是一个简单的sqlite数据库。)
  • 运行“syncdb”
  • 通过代码生成一些测试数据
  • 转到1
  • 关于这一点的第二个问题。。如果您的工作流程与上述类似,您将如何执行4。步您是手动生成测试数据,还是在Django应用程序中有一个合适的钩子点,可以在服务器启动时注入测试数据生成代码\


    TIA。

    步骤2和3可以一步完成:

    manage.py reset appname
    

    根据我的理解,第4步是最容易管理的,使用

    这是Django的设备的工作。它们很方便,因为它们是独立于数据库的,并且测试工具(和manage.py)具有对它们的内置支持

    要使用它们:

  • 在应用程序中设置数据(呼叫 它使用管理工具创建“foo”)
  • 在您的文件夹中创建一个fixtures目录 “foo”应用程序目录
  • 类型:
    python manage.py dumpdata--indent=4 foo>foo/fixtures/foo.json
  • 现在,在syncdb阶段之后,您只需键入:

     python manage.py loaddata foo.json
    
    您的数据将被重新创建

    如果要在测试用例中使用它们:

    class FooTests(TestCase):
        fixtures = ['foo.json']
    
    请注意,如果您的模式发生剧烈变化,您将不得不重新创建或手动更新您的装置

    您可以在django文档中阅读更多关于装置的信息,这里是我们的工作

  • 应用程序使用架构版本号命名<代码>appa_2,
    appb_1

  • 微小的变化不会改变数字

  • 重大变化增加了这个数字。Syncdb工作。可以编写“数据迁移”脚本

    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代码已经做了一些更改,则此方法不起作用。要求它们与数据库同步。