如何在迁移后而不是在syncdb之后加载initial_data(fixture)?

时间:2012-05-16 08:53:24

标签: python django migration fixtures django-syncdb

我有bootstrap脚本执行syncdbmigrate

import settings
from django.core.management import setup_environ, call_command

setup_environ(settings)                                         # Setting up the env settings
call_command('syncdb', migrate=True, interactive=False)         # Sync the database

预要件:

  • django-south用于迁移。

流程发生:

  • initial_data fixture包含由迁移创建的模型的数据。
  • 执行
  • syncdb会创建除迁移存在的应用之外的所有表。
  • 发布syncdb它会尝试加载initial_data并引发找不到db的错误,因为带有迁移的app表不是由syncdb创建的。 [问题]
  • 然后执行创建db的迁移。
  • 发布migration这次会成功自动加载initial_data

问题:

  • 当它试图为尚未创建的表加载fixture时,如何摆脱error
  • 我是否可以通过某种方式编辑上述脚本,以便仅在执行initial_data之后加载migration

2 个答案:

答案 0 :(得分:2)

您可以在syncdb:

时禁用加载初始数据
call_command('syncdb', load_initial_data=False, interactive=False)
call_command('migrate', interactive=False)

来自syncdb.py的源代码:

# Stealth option -- 'load_initial_data' is used by the testing setup                                                               
# process to disable initial fixture loading.                                                                                      
load_initial_data = options.get('load_initial_data', True)

答案 1 :(得分:0)

有几种方法可以解决这个问题:

  1. 只需调用要为其填充数据的应用
  2. ,即可从初始数据转储中排除应用
  3. 可以尝试使用此库https://github.com/davedash/django-fixture-magic
  4. 您可以编写自定义管理命令来填充所需的模型
  5. 您还可以使用南http://south.aeracode.org/docs/tutorial/part3.html
  6. 附带的数据迁移

    我个人会选择1或3.使用第一点,将灯具分别存储在灯具文件夹下的每个应用中。但是,如果您的模型发生变化,这很难更新。因此,编写自定义管理命令可能是最无痛的。