正确的方法来创建一个创建组的django数据迁移?

时间:2015-11-02 19:36:08

标签: django django-migrations

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

但如果我这样做:

from django.contrib.auth.models import Group

def add_operations_group(apps, schema_editor):
    Group.objects.get_or_create(name='operations')

我明白了:

django.db.utils.OperationalError: no such table: auth_group

如果我这样做:

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

我明白了:

LookupError: No installed app with label 'django.contrib.auth'

有办法做到这一点吗?或者有一个" Django Way"确保创建权限和组等内容?

2 个答案:

答案 0 :(得分:4)

我就是这样做的:

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)
    ]

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

答案 1 :(得分:0)

来自César的答案是正确的。要使它变得更多,Django可以通过转到django应用程序的根文件夹并输入以下内容来自动创建迁移文件:

python manage.py makemigrations <yourappname> --empty

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

这将在应用程序的子目录00​​01_initial.py中创建一个空迁移文件

然后您可以按照César的说明进行更改。哪个可以在Django 2.2上正常工作