Ручная миграция Django для добавления группы

Я пытаюсь создать миграцию, которая будет автоматически добавлять группу и разрешения для группы, когда она запускается. Я адаптировал некоторый код из документации и примера. Я могу заставить миграцию добавить группу, но не разрешения. Я получаю следующую ошибку: TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use permissions.set() instead. Я не уверен, как реализовать это предложение. Есть идеи?

Миграция:


from django.db import migrations, models
from django.contrib.auth.models import Group, Permission
from django.contrib.auth.management import create_permissions



def add_group_permissions(apps, schema_editor):
    for app_config in apps.get_app_configs():
        create_permissions(app_config, apps=apps, verbosity=0)

    # Employee
    group, created = Group.objects.get_or_create(name='Employee')
    if created:
        permissions_qs = Permission.objects.filter(
                         codename__in=[
                                         'can_add_how_to_entry',
                                         'can_change_how_to_entry',
                                         'can_view_how_to_entry',
                                                      ]
        )
        group.permissions = permissions_qs
        group.save()

class Migration(migrations.Migration):

    dependencies = [
        ('accounts', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(add_group_permissions),
    ]

Помните, что group.permissions - это менеджер связанных запросов, а не поле, поэтому если вы присвоите ему что-то, то уничтожите его. Поэтому вам нужно сделать что-то вроде:

permissions_qs = Permission.objects ...
for permission in permissions_qs:
    group.permissions.add(permission)
group.save()
Вернуться на верх