18

我正在运行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建议。

以下是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
        }
    }
]

谢谢你的帮助,

4

5 回答 5

13

创建数据库转储时排除 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-/ 为我节省了一天

于 2020-12-06T16:06:49.063 回答
9

今天(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

我所做的只是将模型重命名为pkto 。之后,迁移按预期工作。idcontenttypes.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还有很多其他的模型,但是将pk重命名为id只是为了contenttypes.contenttype解决我的问题。

于 2020-04-24T11:39:11.680 回答
7

我有一个类似的问题。受这篇文章的启发:

https://github.com/yourlabs/django-cities-light/issues/89(请参阅“如何修复它”)

在运行 loaddata 命令之前,我在“保存功能”之前注释了接收器信号装饰器,它起作用了。

于 2017-10-30T23:53:10.880 回答
1

转到json文件并将evey单个'pk'更改为'id'如果你使用vs代码你可以选择1并按cmd/ctrl + f2作为快捷方式

于 2020-08-12T09:29:01.470 回答
0

在导出和导入具有多对多关系的模型时遇到了同样的问题。这是因为我在导出时手动指定了 ManyToMany through 模型,导致了唯一约束错误。

class MyModel(model.Model):
    
    groups = models.ManyToManyField(
        'myapp.mymodel',        
        
    )

你只需要执行dumpdata myapp.mymodel,而不是`dumpdata myapp.mymodel myapp.mymodel_groups"

否则,您的直通模型数据在导出中两次,并导致唯一约束错误。

这是一个很好的问题,当你指定一个明确的模型时,它的行为如何......我不知道也没有时间测试:)

于 2020-10-05T17:08:11.413 回答