我的Django项目正在使用South应用程序来处理模式和数据迁移。在我的一个应用程序中,我有迁移(编号0004),它负责从json文件加载数据夹具:
class Migration(DataMigration):
def forwards(self, orm):
from django.core.management import call_command
call_command("loaddata", "dummy_data.json")
在同一个项目中,我尝试添加“软删除”功能,需要再添加一个字段,定义为:
deleted_at = models.DateTimeField(blank=True, null=True)
根据此更改,我添加了新的迁移,其编号为0009.之后,我启动 migrate 命令,这会给我一个错误:
DatabaseError: Problem installing fixture 'C:/Users/Grzegorz/PycharmProjects/Dummy Project/Dummy\app_subapp\fixtures\dummy_data.json': Could not load app_subapp.DummyData(pk=1): (1054, "Unknown column 'deleted_at' in 'field list'")
这很奇怪,因为在应用迁移0004时出现了这个错误,早期工作正常,并且在此步骤中南方进程点deleted_at
不应该也不存在于我的数据库中。我找到了在0009解决了问题后,从步骤0004开始使用装载夹具移动迁移,但看起来非常脏并且不是解决此问题的好方法。
您有什么建议我如何解决此问题并正确处理南方的迁移和夹具加载?
答案 0 :(得分:3)
我找到了一个可以完成这项工作的Django代码段!
https://djangosnippets.org/snippets/2897/
它根据夹具中冻结的模型加载数据,而不是应用程序代码中的实际模型定义! 适合我。
答案 1 :(得分:0)
我找到了解决问题的方法。最后,我从South迁移中提取了负载装置,并将此操作委托给Fabric。现在我已将迁移和加载初始数据分开,因此一切都按预期工作。
答案 2 :(得分:0)
另一个解决方案是加载fixture文件并使用迁移的orm插入它:
from south.v2 import DataMigration
import json
class Migration(DataMigration):
def forwards(self, orm):
json_data=open("path/to/your/fixture.json")
items = json.load(json_data)
for item in items:
# Be carefull, this lazy line won't resolve foreign keys
obj = orm[item["model"]](**item["fields"])
obj.save()
json_data.close()
使用此方法,您将在当前数据库结构中加载fixture。