创建组的Django数据迁移的正确方法?

Chr*_*vey 4 django django-migrations

我想创建可以创建权限和组的数据迁移,以便其他开发人员可以运行迁移并进行所有设置。我能够创建迁移并很好地运行它们,但是现在运行测试时出现错误。

但是,如果我这样做:

from django.contrib.auth.models import Group

def add_operations_group(apps, schema_editor):
    Group.objects.get_or_create(name='operations')
Run Code Online (Sandbox Code Playgroud)

我得到:

django.db.utils.OperationalError: no such table: auth_group
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

def add_operations_group(apps, schema_editor):
    Group = apps.get_model("django.contrib.auth", "group")
    Group.objects.get_or_create(name='operations')
Run Code Online (Sandbox Code Playgroud)

我得到:

LookupError: No installed app with label 'django.contrib.auth'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?还是有一种“ Django方式”来确保创建权限和组之类的东西?

小智 7

C\xc3\xa9sar 的答案是正确的。为了使其更方便,Django 会自动创建迁移文件,方法是转到 django 应用程序根文件夹并输入:

\n\n
python manage.py makemigrations <yourappname> --empty\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:根据您的系统配置,您可能需要 python3 而不是 python。

\n\n

这会在您的应用程序的子目录中创建一个空的迁移文件,名为 0001_initial.py

\n\n

然后您可以按照 C\xc3\xa9sar 说明更改它。与 Django 2.2 一起工作正常

\n


Cés*_*sar 5

这是我的方法:

from django.db import models, migrations


def apply_migration(apps, schema_editor):
    Group = apps.get_model('auth', 'Group')
    Group.objects.bulk_create([
        Group(name=u'group1'),
        Group(name=u'group2'),
        Group(name=u'group3'),
    ])


def revert_migration(apps, schema_editor):
    Group = apps.get_model('auth', 'Group')
    Group.objects.filter(
        name__in=[
            u'group1',
            u'group2',
            u'group3',
        ]
    ).delete()


class Migration(migrations.Migration):

    dependencies = [
        ('someapp', 'XXXX_some_migration'),
    ]

    operations = [
        migrations.RunPython(apply_migration, revert_migration)
    ]
Run Code Online (Sandbox Code Playgroud)

虽然,必须有更多的Djangonic方法。