如何在 Django 项目中使用初始数据填充 auth.groups 和 auth.group_permissions 表
How to populate auth.groups and auth.group_permissions tables with initial data in Django project
上下文
我正在使用 PostgreSQL。
我想在我的项目第一次迁移后立即填充 auth.groups
和 auth.group_permissions
表。
所以,在我按照我想要的方式设置这些表之后,我通过 运行ning
转储它们
python manage.py dumpdata auth.groups auth.group_permissions > core/fixtures/initial_data.json
生成的文件是这个
[
{
"model": "auth.group",
"pk": 1,
"fields": {
"name": "Admin",
"permissions": [
29,
31,
32,
33,
34,
35,
36
]
}
},
{
"model": "auth.group",
"pk": 2,
"fields": {
"name": "Operators",
"permissions": [
42,
43,
44,
39,
40
]
}
},
{
"model": "auth.group_permissions",
"pk": 12,
"fields": {
"group": 1,
"permission": 32
}
},
{
"model": "auth.group_permissions",
"pk": 13,
"fields": {
"group": 1,
"permission": 33
}
},
{
"model": "auth.group_permissions",
"pk": 14,
"fields": {
"group": 1,
"permission": 34
}
},
{
"model": "auth.group_permissions",
"pk": 15,
"fields": {
"group": 1,
"permission": 35
}
},
{
"model": "auth.group_permissions",
"pk": 16,
"fields": {
"group": 1,
"permission": 36
}
},
{
"model": "auth.group_permissions",
"pk": 17,
"fields": {
"group": 1,
"permission": 29
}
},
{
"model": "auth.group_permissions",
"pk": 18,
"fields": {
"group": 1,
"permission": 31
}
},
{
"model": "auth.group_permissions",
"pk": 19,
"fields": {
"group": 2,
"permission": 39
}
},
{
"model": "auth.group_permissions",
"pk": 20,
"fields": {
"group": 2,
"permission": 40
}
},
{
"model": "auth.group_permissions",
"pk": 21,
"fields": {
"group": 2,
"permission": 42
}
},
{
"model": "auth.group_permissions",
"pk": 22,
"fields": {
"group": 2,
"permission": 43
}
},
{
"model": "auth.group_permissions",
"pk": 23,
"fields": {
"group": 2,
"permission": 44
}
}
]
问题
为了尝试这个,我删除并重新创建了我的数据库,这样它就完全新鲜了,在第一个 migrate
命令之后,我 运行
python manage.py loaddata initial_data.json
这里我得到了错误
django.db.utils.IntegrityError: Problem installing fixture '/home/uname/Workspace/project/core/fixtures/initial_data.json':
Could not load auth.Group_permissions(pk=12): duplicate key value violates unique constraint "auth_group_permissions_group_id_permission_id_0cd325b0_uniq"
DETAIL: Key (group_id, permission_id)=(1, 32) already exists.
这让我很困惑。当这两个表此时完全为空时,它怎么会抛出重复键呢?我怎样才能用这些初始数据填充这两个表?
谢谢
fixture 在单个事务中加载,您的转储中有重复数据。
名称为“Admin”的第一个 auth.group
条目在列表中定义了它的所有权限,这包括 ID 为 32
的权限。第一个 auth.group_permissions
条目然后复制此数据,这导致异常,因为相同的数据已在事务中较早地加载
从转储 JSON 中删除所有 auth.group_permissions
条目或从 dumpdata
命令中排除 auth.group_permissions
是解决方案
上下文
我正在使用 PostgreSQL。
我想在我的项目第一次迁移后立即填充 auth.groups
和 auth.group_permissions
表。
所以,在我按照我想要的方式设置这些表之后,我通过 运行ning
转储它们python manage.py dumpdata auth.groups auth.group_permissions > core/fixtures/initial_data.json
生成的文件是这个
[
{
"model": "auth.group",
"pk": 1,
"fields": {
"name": "Admin",
"permissions": [
29,
31,
32,
33,
34,
35,
36
]
}
},
{
"model": "auth.group",
"pk": 2,
"fields": {
"name": "Operators",
"permissions": [
42,
43,
44,
39,
40
]
}
},
{
"model": "auth.group_permissions",
"pk": 12,
"fields": {
"group": 1,
"permission": 32
}
},
{
"model": "auth.group_permissions",
"pk": 13,
"fields": {
"group": 1,
"permission": 33
}
},
{
"model": "auth.group_permissions",
"pk": 14,
"fields": {
"group": 1,
"permission": 34
}
},
{
"model": "auth.group_permissions",
"pk": 15,
"fields": {
"group": 1,
"permission": 35
}
},
{
"model": "auth.group_permissions",
"pk": 16,
"fields": {
"group": 1,
"permission": 36
}
},
{
"model": "auth.group_permissions",
"pk": 17,
"fields": {
"group": 1,
"permission": 29
}
},
{
"model": "auth.group_permissions",
"pk": 18,
"fields": {
"group": 1,
"permission": 31
}
},
{
"model": "auth.group_permissions",
"pk": 19,
"fields": {
"group": 2,
"permission": 39
}
},
{
"model": "auth.group_permissions",
"pk": 20,
"fields": {
"group": 2,
"permission": 40
}
},
{
"model": "auth.group_permissions",
"pk": 21,
"fields": {
"group": 2,
"permission": 42
}
},
{
"model": "auth.group_permissions",
"pk": 22,
"fields": {
"group": 2,
"permission": 43
}
},
{
"model": "auth.group_permissions",
"pk": 23,
"fields": {
"group": 2,
"permission": 44
}
}
]
问题
为了尝试这个,我删除并重新创建了我的数据库,这样它就完全新鲜了,在第一个 migrate
命令之后,我 运行
python manage.py loaddata initial_data.json
这里我得到了错误
django.db.utils.IntegrityError: Problem installing fixture '/home/uname/Workspace/project/core/fixtures/initial_data.json':
Could not load auth.Group_permissions(pk=12): duplicate key value violates unique constraint "auth_group_permissions_group_id_permission_id_0cd325b0_uniq" DETAIL: Key (group_id, permission_id)=(1, 32) already exists.
这让我很困惑。当这两个表此时完全为空时,它怎么会抛出重复键呢?我怎样才能用这些初始数据填充这两个表?
谢谢
fixture 在单个事务中加载,您的转储中有重复数据。
名称为“Admin”的第一个 auth.group
条目在列表中定义了它的所有权限,这包括 ID 为 32
的权限。第一个 auth.group_permissions
条目然后复制此数据,这导致异常,因为相同的数据已在事务中较早地加载
从转储 JSON 中删除所有 auth.group_permissions
条目或从 dumpdata
命令中排除 auth.group_permissions
是解决方案