我一直在运行生产Django应用程序的每日转储,如下所示:
./manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission -e sessions -e admin --all > data.json
通常情况下,将其还原到另一个用于开发的安装并没有造成问题,但最近尝试恢复数据导致了这一点:
./manage.py loaddata -i data.json
django.db.utils.IntegrityError: Problem installing fixtures: The row in table 'reversion_version' with primary key '1' has an invalid foreign key: reversion_version.content_type_id contains a value '14' that does not have a corresponding value in django_content_type.id.
这告诉我这个问题是由最近添加django-reversion导致代码库引起的,但我不确定为什么我无法找到任何导入备份的方法。一些帖子建议使用自然键可能有效,但后来我得到错误:
django.core.serializers.base.DeserializationError: Problem installing fixture 'data.json': [u"'maintainer' value must be an integer."]
在这种情况下,“maintainer”是models.py中模型定义中对这段代码的引用:
maintainer = models.ForeignKey(Organization,related_name="maintainer",blank=True,null=True)
有没有人对如何安装此转储有任何建议,或修改转储过程以进行可重现的转储?
我注意到生产站点正在使用Postgres,测试站点有SQLite,但这在以前从未出现过问题。
答案 0 :(得分:1)
在本地计算机上克隆项目并执行以下操作:
答案 1 :(得分:0)
那真是太痛苦了。似乎修复它的方法是从生产posgres数据库转储django_content_types作为csv,从生成的csv文件中删除ID,然后在SQLite数据库上为测试版本执行以下操作:
CREATE TABLE temp_table(a, b, c)
.mode csv
.import content_type.csv temp_table
DELETE FROM sqlite_sequence WHERE name = 'django_content_type'
DELETE FROM django_content_type
INSERT INTO django_content_type(name,app_label,model) SELECT * FROM temp_table
这样可以设置django_content_type表中条目的id与转储中的条目匹配,从而允许还原继续进行。