我无法将Django fixture加载到MySQL数据库中,因为存在contenttypes冲突。首先,我尝试仅从我的应用程序中转储数据,方法如下:
./manage.py dumpdata escola > fixture.json
但是我一直遇到缺失外键的问题,因为我的应用程序“escola”使用了其他应用程序的表。 我不断添加其他应用程序,直到我做到了这一点:
./manage.py dumpdata contenttypes auth escola > fixture.json
现在的问题是,当我尝试将数据作为测试夹具加载时出现以下约束违规:
IntegrityError: (1062, "Duplicate entry 'escola-t23aluno' for key 2")
似乎问题在于Django试图使用与fixture中主键值冲突的不同主键值动态重新创建contenttypes。这似乎与此处记录的错误相同:http://code.djangoproject.com/ticket/7052
问题在于建议的解决方法是转储contenttypes应用程序,而我已经在做了!怎么回事?如果有任何区别,我确实有一些自定义模型权限,如此处所述:http://docs.djangoproject.com/en/dev/ref/models/options/#permissions
--natural
选项中使用-e contenttypes -e auth.permission
?我刚试了一下不带--natural
选项也可以。而且这里的文档说如果导出auth.permission
和contenttypes
,应该使用此选项。 - wlnirvanaContentType
和Permission
无法保证获得与之前相同的id。您的数据转储包含可能引用另一个数据库中不同对象的id。这可能因以下原因之一而适用于您: 1)您的数据没有任何对这些对象的引用。 2)Permission/ContentTypes的原始ID已被保留。 3)您的loaddata成功了,但实际上由于对象引用错误的对象而导致数据损坏,而您尚未意识到。 - Ski--natural
标志现已弃用,推荐使用--natural-foreign
(和--natural-primary
)标志。 - frnhrmanage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 4 > project_dump.json
。 - Paolo