如何在 Django 项目中使用初始数据填充 auth.groups 和 auth.group_permissions 表

How to populate auth.groups and auth.group_permissions tables with initial data in Django project

上下文

我正在使用 PostgreSQL。

我想在我的项目第一次迁移后立即填充 auth.groupsauth.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 是解决方案