经常修改模型时的Django工作流程?

时间:2009-01-30 23:18:55

标签: python django django-models workflow django-syncdb

因为我通常不会在Django项目中进行模型的预先设计,所以我最终会修改模型,因此每次都会删除我的测试数据库(因为“syncdb”不会自动更改表格您)。以下是我的工作流程,我想听听你的。欢迎任何想法..

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

    TIA。

6 个答案:

答案 0 :(得分:22)

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

manage.py reset appname

根据我的理解,使用fixtures

可以轻松管理第4步

答案 1 :(得分:15)

这是Django的灯具工作。它们很方便,因为它们与数据库无关,并且测试工具(和manage.py)具有内置的支持。

使用它们:

  1. 在您的应用中设置您的数据(通话 它“foo”)使用管理工具
  2. 在您的网站中创建一个fixtures目录 “foo”app目录
  3. 输入:python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json
  4. 现在,在syncdb阶段之后,您只需输入:

     python manage.py loaddata foo.json
    

    您的数据将会重新创建。

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

    class FooTests(TestCase):
        fixtures = ['foo.json']
    

    请注意,如果架构发生重大变化,则必须重新创建或手动更新灯具。

    您可以在Fixture Loading

    的django文档中阅读有关灯具的更多信息

答案 2 :(得分:12)

这就是我们的工作。

  1. 应用程序以Schema版本号命名。 appa_2appb_1

  2. 次要更改不会更改数字。

  3. 重大更改会增加数字。 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 ...
    
  4. 关键是drop和recreate并不总是合适的。将数据从旧模型移动到新模型有时很有帮助,无需从头开始重建。

答案 3 :(得分:11)

南方是最酷的。

虽然数据无关紧要,但很好的重置效果最佳。

http://south.aeracode.org/

答案 4 :(得分:4)

要添加到Matthew的回复中,我还经常使用自定义SQL来提供记录here的初始数据。

Django只在<app>/sql/<modelname>.sql中查找文件,并在syncdbsqlreset期间创建表后运行它们。当我需要做一些像从其他非Django数据库表填充我的Django表时,我使用自定义SQL。

答案 5 :(得分:1)

我个人的开发数据库是针对我正在进行的项目而言相当大,所以我使用dmigrations来创建数据库迁移脚本来修改数据库(而不是每次像我一样擦除数据库)在开始)。

编辑:实际上,我现在正在使用South: - )