我正在使用空数据库运行python manage.py loaddata 'path/to/mydata.json'
(User
和UserProfile
表已创建但未填充),但是,我收到以下错误:
django.db.utils.IntegrityError: Problem installing fixture 'path/to/mydata.json': Could not load myapp.UserProfile(pk=1): UNIQUE constraint failed: myapp_userprofile.user_id
我检查过(即使在运行此命令后)并且根本没有填充数据库。那么怎么能给出一个pk不是唯一的错误呢?
如果相关,UserProfile
只是扩展了User
关系的默认OneToOneField
模型,建议here。
以下是mydata.json
包含的内容:
[
{
"model": "auth.user",
"pk": 1,
"fields": {
"password": "pbkdf2_sha256..",
"last_login": "2016-10-22T15:19:46.926Z",
"is_superuser": true,
"username": "thesuperuser",
"first_name": "",
"last_name": "",
"email": "a@a.co",
"is_staff": true,
"is_active": true,
"date_joined": "2016-10-22T14:48:27.394Z",
"groups": [],
"user_permissions": []
}
},
{
"model": "auth.user",
"pk": 2,
"fields": {
"password": "pbkdf2_sha256..",
"last_login": null,
"is_superuser": false,
"username": "user1",
"first_name": "User",
"last_name": "One",
"email": "",
"is_staff": false,
"is_active": true,
"date_joined": "2016-10-22T15:20:32Z",
"groups": [],
"user_permissions": []
}
},
{
"model": "auth.user",
"pk": 4,
"fields": {
"password": "pbkdf2_sha256..",
"last_login": null,
"is_superuser": false,
"username": "user3",
"first_name": "User",
"last_name": "Three",
"email": "",
"is_staff": false,
"is_active": true,
"date_joined": "2016-10-22T15:21:09Z",
"groups": [],
"user_permissions": []
}
},
{
"model": "auth.user",
"pk": 3,
"fields": {
"password": "pbkdf2_sha256..",
"last_login": null,
"is_superuser": false,
"username": "user2",
"first_name": "User",
"last_name": "Two",
"email": "",
"is_staff": false,
"is_active": true,
"date_joined": "2016-10-22T15:21:03Z",
"groups": [],
"user_permissions": []
}
},
{
"model": "myapp.userprofile",
"pk": 1,
"fields": {
"user": 1,
"money": 100
}
},
{
"model": "myapp.userprofile",
"pk": 2,
"fields": {
"user": 2,
"money": 100
}
},
{
"model": "myapp.userprofile",
"pk": 3,
"fields": {
"user": 3,
"money": 100
}
},
{
"model": "myapp.userprofile",
"pk": 4,
"fields": {
"user": 4,
"money": 100
}
}
]
感谢您的帮助,
答案 0 :(得分:4)
我有类似的问题。灵感来自这篇文章:
https://github.com/yourlabs/django-cities-light/issues/89(参见'如何解决')
在运行loaddata命令之前,我在“保存功能”之前评论了接收器信号装饰器,并且它工作正常。
答案 1 :(得分:3)
今天( 2020年4月24日),我在 Django 2.2
中遇到了类似的问题我的装置文件很简单:
[
{
"model": "contenttypes.contenttype",
"pk": 1,
"fields": {
"app_label": "admin",
"model": "logentry"
}
},
{
"model": "contenttypes.contenttype",
"pk": 2,
"fields": {
"app_label": "auth",
"model": "permission"
}
}]
我运行./manage.py loaddata initial_data.json
时得到了:
django.db.utils.IntegrityError: Problem installing fixture '/home/user/reponame/projectname/initial_data.json': Could not load contenttypes.ContentType(pk=2): UNIQUE constraint failed: django_content_type.app_label, django_content_type.model
我要做的只是将pk
模型的id
重命名为contenttypes.contenttype
。之后,迁移按预期进行。
./manage.py loaddata initial_data.json
Installed 2 object(s) from 1 fixture(s)
更改后,我的initial_data.json
文件是:
[
{
"model": "contenttypes.contenttype",
"id": 1,
"fields": {
"app_label": "admin",
"model": "logentry"
}
},
{
"model": "contenttypes.contenttype",
"id": 2,
"fields": {
"app_label": "auth",
"model": "permission"
}
}]
值得一提的是,我原来的 initial_dataj.json 还有许多其他模型,但仅将{{1 }}解决了我的问题。
答案 2 :(得分:1)
转到json文件,并将evey单'pk'更改为'id' 如果您使用vs代码,则只需选择1并按cmd / ctrl + f2作为快捷方式
答案 3 :(得分:1)
在创建数据库转储时排除ContentType和Auth Permissions对象。
python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 2 > dump.json
之后,您应该可以运行该命令而没有任何问题
python manage.py loaddata dump.json
贷给 https://www.coderedcorp.com/blog/how-to-dump-your-django-database-and-load-it-into-/ 为了拯救我的生活
答案 4 :(得分:0)
在导出和导入具有ManyToMany关系的模型时遇到相同的问题。这是因为在导出时我通过模型手动添加了ManyToMany,这是导致唯一约束错误的原因。
class MyModel(model.Model):
groups = models.ManyToManyField(
'myapp.mymodel',
)
您只需要执行dumpdata myapp.mymodel
,而不是`dumpdata myapp.mymodel myapp.mymodel_groups“
否则,您的直通模型数据将两次导出,并导致唯一的约束错误。
当您通过模型指定显式时,这是一个很好的问题……我不知道并且没有时间进行测试:)