我正在尝试为我的应用编写自定义迁移,以创建一些初始数据。我要做的一件事是根据初始迁移中创建的模型创建一个具有权限的组。
我遇到的问题是,似乎Django在单个事务中正在运行两个迁移(0001_initial.py
和0002_auto_20190717_0000.py
)。我试图找到一个Permission
对象,该对象应与模型一起创建,但不存在。
要进行故障排除,我在尝试获取未找到的Permission
对象之后放置了一个断点。在一个单独的终端中,我创建了一个Django shell,并尝试运行查询以查找所有ContentType
对象,但未找到任何结果。如果我让迁移完成,然后运行相同的查询,它将查找所有内容类型。在迁移暂停的过程中,我尝试创建一个超级用户,并且命令失败,但异常django.db.utils.OperationalError: database is locked
我尝试将第二次迁移重命名为non.py扩展名,然后运行初始迁移。然后,我将第二次迁移重命名为.py,然后再次运行migration,它会正确找到权限并将其添加到组中。
On databases that support DDL transactions (SQLite and PostgreSQL), migrations will run inside a transaction by default. For use cases such as performing data migrations on large tables, you may want to prevent a migration from running in a transaction by setting the atomic attribute to False
我尝试将atomic = False
添加到初始迁移和自定义迁移中,但这没有任何效果。
问题是:有没有一种方法可以创建一个Django Group
,它具有基于在相同迁移中添加的新模型或在同一时间运行的一组迁移的权限?
我正在使用Django 2.2.3和PostgreSQL。