由于内容类型冲突,我无法将 Django 固定装置加载到我的 MySQL 数据库中。首先,我尝试只从我的应用程序中转储数据,如下所示:
./manage.py dumpdata escola > fixture.json
但我总是遇到缺少外键的问题,因为我的应用程序“escola”使用了其他应用程序中的表。我一直在添加其他应用程序,直到我做到这一点:
./manage.py dumpdata contenttypes auth escola > fixture.json
现在问题是当我尝试将数据加载为测试 fixture 时出现以下约束冲突:
IntegrityError: (1062, "Duplicate entry 'escola-t23aluno' for key 2")
问题似乎在于 Django 试图动态地重新创建具有不同主键值的内容类型,这些主键值与 fixture 中的主键值冲突。这似乎与此处记录的错误相同:http://code.djangoproject.com/ticket/7052
问题是推荐的解决方法是转储我已经在做的内容类型应用程序!?是什么赋予了?如果有任何区别,我确实有一些自定义模型权限,如下所述:http://docs.djangoproject.com/en/dev/ref/models/options/#permissions
最佳答案
manage.py dumpdata --natural
将使用更持久的外键表示。在 django 中,它们被称为“自然键”。例如:
Permission.codename
用于支持Permission.id
User.username
用于User.id
阅读更多:natural keys section in "serializing django objects"
dumpdata
的一些其他有用参数:
--indent=4
使其易于阅读。-e session
排除 session 数据-e admin
排除管理站点上的管理操作历史记录-e contenttypes -e auth.Permission
排除在syncdb
期间每次从模式中自动重新创建的对象。只能将它与--natural
一起使用,否则您可能会得到对齐错误的 id 编号。
关于mysql - 在 Django 中加载固定装置时出现内容类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853796/