由於initial_data
fixture的使用已過時,因此我試圖通過遷移來添加初始數據。Django:提供遷移初始組
我創建了我的模型,其中一個模型包含代碼爲can_use_feature
的權限。
當我運行makemigrations
時,會創建一個0001_initial.py
遷移。所述migrate
命令創建數據庫,以及填充並從上述許可是在auth_permission
表。
現在我想有默認的數據庫權限的組,所以我創建這個遷移爲0002_default_group.py
:
from __future__ import unicode_literals
from django.db import migrations
def create_default_group(apps, schema_editor):
GroupModel = apps.get_model('auth', 'group')
group = GroupModel(name='My Group')
group.save()
PermissionModel = apps.get_model('auth', 'permission')
permission = PermissionModel.objects.get(codename='can_use_feature')
group.permissions.add(permission)
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.RunPython(create_default_group),
]
現在神祕的東西發生了:當我再次刪除數據庫,並執行migrate
命令,DoesNotExist
引發錯誤,就在permission = PermissionModel.objects.get(codename='can_use_feature')
線。
當我刪除了0002_default_group.py
,刪除數據庫,執行migrate
,複製0002_default_group.py
返回並再次運行migrate
,一切工作正常,在我想要的方式創建組。
什麼是必須爲了得到遷移到只有一步工作,是否會改變?
因此,對於工作數據庫,我們在幾個步驟中進行遷移:首先,我們遷移'auth','site'和其他使用'post-migrate'的應用程序,然後遷移其他應用程序。但是測試數據庫是什麼?它是不可能來調整遷移過程 – kammala
我想這是不完全清楚,但我的觀點是,你shoulf在'create_default_group自行創建()',如果他們沒有在這一點上存在。然後,您可以一次運行所有遷移。 – knbk