一尘不染

在Django中加载fixture时contenttype的问题

django

由于内容类型冲突,我无法将Django固件加载到我的MySQL数据库中。首先,我尝试仅从我的应用程序中转储数据,如下所示:

./manage.py dumpdata escola > fixture.json

但由于我的应用程序“ escola”使用了其他应用程序中的表,所以我一直没有遇到外键问题。我一直在添加其他应用程序,直到我明白了:

./manage.py dumpdata contenttypes auth escola > fixture.json

现在的问题是,当我尝试将数据加载为测试装置时,违反了以下约束条件:

IntegrityError: (1062, "Duplicate entry 'escola-t23aluno' for key 2")

阅读 368

收藏
2020-03-26

共1个答案

一尘不染

manage.py dumpdata --natural将使用更持久的外键表示形式。在Django中,它们被称为“自然键”。例如:

  • Permission.codename被用来支持 Permission.id
  • User.username被用来支持 User.id
    阅读更多:“序列化django对象”中的自然键部分

其他一些有用的参数dumpdata

  • --indent=4 使它易于阅读。
  • -e sessions 排除会话数据
  • -e admin 排除管理员网站上管理员操作的历史记录
  • -e contenttypes -e auth.Permission排除在每次期间从模式自动重新创建的对象syncdb。请仅将其与一起使用--natural,否则可能会导致ID编号不一致。
2020-03-26