mysql - 在 Django 中加载固定装置时出现内容类型问题

标签 mysql django django-models fixtures mysql-error-1062

由于内容类型冲突,我无法将 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/

相关文章:

php - 在 PHP 中保持 MySQL 凭据私密性的最佳方法是什么?

MySQL 给出 JOINed 表中每一行的结果

mysql - 插入错误语法后选择 count(*) 并选择 sum(my_data)#1064

mysql - 如何计算平均时间?

django - 在 MonthArchiveView 中默认为当前月份

python - Django 麻烦 : django. setup() 抛出 "ImportError: No module named ' project_name'"

django - 有没有办法从 Django 中的模型查询集中获取相关字段的类型?

python - Django 1.8,makemigrations 没有检测到新添加的应用程序

Python:如何创建二元组序列

python - Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?