Django 1.7 where to put the code to add Groups programmatically?

前端 未结 2 866
独厮守ぢ
独厮守ぢ 2021-02-02 14:33

I have been trying to find the answer in the Django Auth docs, but can not seem to find what I am looking for.

The problem I am having is, when I define the code for ad

2条回答
  •  醉话见心
    2021-02-02 14:52

    Combining @Robert Grant and this I was able to do it like:

    python manage.py makemigrations --empty yourappname
    

    And then:

    from django.contrib.auth.models import Group, Permission
    from django.db import models, migrations
    import logging
    
    
    logger = logging.getLogger(__name__)
    
    campaign_group_permissions = {
      "Campaign Manager": [
        "add_campaign",
        "change_campaign",
        "delete_campaign",
        "view_campaign",
        "add_campaignsms",
        "add_sending",
        "change_sending",
        "view_sending"
      ]
    }
    
    
    def add_group_permissions():
        # See https://code.djangoproject.com/ticket/23422
        db_alias = schema_editor.connection.alias
        try:
            emit_post_migrate_signal(2, False, 'default')
        except TypeError:  # Django < 1.8
            emit_post_migrate_signal([], 2, False, 'default', db_alias)
    
        for group in campaign_group_permissions:
            role, created = Group.objects.get_or_create(name=group)
            logger.info(f'{group} Group created')
            for perm in campaign_group_permissions[group]:
                role.permissions.add(Permission.objects.get(codename=perm))
                logger.info(f'Permitting {group} to {perm}')
            role.save()
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('yourappname', '0001_initial'),
        ]
    
        operations = [
            migrations.RunPython(add_group_permissions),
        ]
    

    Note: this works on Django 3.x, but I'm pretty sure it will work for Django 1.7 as well.

提交回复
热议问题