的Django 1.7之前,我用来定义每个项目fixtures
目录中的设置:如何按项目创建initial_data灯具在Django 1.7+
FIXTURE_DIRS = ('myproject/fixtures',)
,并用它来把我initial_data.json
灯具存储默认群体对整个项目至关重要。这对我来说工作得很好,因为我可以通过从应用程序特定的数据中分离出每个项目的数据来保持设计的清洁。
现在与Django 1.7,initial_data
固定装置已被弃用,suggesting包括data migrations与应用程序的模式迁移;没有明显的选择全球每个项目的初始数据。
此外新migrations framework安装所有遗留初始数据固定装置兼容的应用程序(包括应用django.contrib.auth
)之前执行迁移。此行为导致我的夹具包含默认组失败安装,因为auth_group
表不存在于数据库中。
关于如何(优雅地)使灯具运行后所有迁移,或至少在身份验证应用程序迁移后的任何建议?或者任何其他想法来解决这个问题? 我发现夹具是一种提供初始数据的好方法,并希望有一种简单而干净的方式来声明它们用于自动安装。新的RunPython太麻烦了,我认为它对于大多数目的来说是一种矫枉过正;它似乎只适用于每个应用程序的迁移。
由于它被弃用,它可能会有点尴尬。一种选择可能是创建一个最小的应用程序来仅加载初始数据,创建迁移,并在RunPython中调用Django用于加载Fixture的任何函数。这样你也可以在你的迁移中指定依赖关系。这可能会涉及一些严重挖掘Django源代码。 – 2014-09-17 14:16:16
是的,我已经创建了一些* meta *应用程序作为最后的手段,并在那里创建迁移(但它仍然很难看)。不知道为什么新的Django至少没有提供**声明式的标准方式**指定要与新迁移一起加载的装置。 – 2014-09-17 19:45:00
因此有人建议重用1.7以前的json/xml fixture文件。你只需要一个简单的数据迁移应用程序,然后解析你现有的json/xml设备并从它们创建记录。无论如何,这应该是发生在1.7之前的事情。 – 2014-10-09 09:04:57