As stated in https://code.djangoproject.com/ticket/23422 , you must send the post_migrate signal before sending Permission objects.
But on Django there is an auxiliary function for sending the necessary signal: django.core.management.sql.emit_post_migrate_signal
Here he worked as follows:
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations from django.core.management.sql import emit_post_migrate_signal PERMISSIONS_TO_ADD = [ 'view_my_stuff', ... ] def create_group(apps, schema_editor): # Workarounds a Django bug: https://code.djangoproject.com/ticket/23422 db_alias = schema_editor.connection.alias try: emit_post_migrate_signal(2, False, 'default', db_alias) except TypeError: # Django < 1.8 emit_post_migrate_signal([], 2, False, 'default', db_alias) Group = apps.get_model('auth', 'Group') Permission = apps.get_model('auth', 'Permission') group, created = Group.objects.get_or_create(name='MyGroup') permissions = [Permission.objects.get(codename=i) for i in PERMISSIONS_TO_ADD] group.permissions.add(*permissions) class Migration(migrations.Migration): dependencies = [ ('auth', '0001_initial'), ('myapp', '0002_mymigration'), ] operations = [ migrations.RunPython(create_group), ]
alanjds
source share