如何在 Django 1.7 迁移中引用生成的权限
How to reference generated permissions in Django 1.7 migrations
我正在尝试创建一个 auth.Group 具有自动迁移权限的文件。我的问题是,当我 运行 在空数据库上迁移时,试图将权限附加到组的迁移找不到权限。如果我以较早的迁移为目标,以便迁移退出时没有错误,则权限会出现在数据库中,之后迁移代码可以找到该权限。那么,当迁移 运行 背靠背时,我该怎么做才能使迁移引用在早期迁移中创建的权限?
def load_data(apps, schema_editor):
Permission = apps.get_model('auth', 'Permission')
Group = apps.get_model('auth', 'Group')
can_add = Permission.objects.get(codename='add_game')
developers = Group.objects.create(name='Developer')
developers.permissions.add(can_add)
developers.save()
class Migration(migrations.Migration):
dependencies = [
('myApp', '0004_game'),
]
operations = [
migrations.RunPython(load_data),
]
游戏模型是在较早的迁移中创建的。此代码总是导致错误,指出当我 运行 它与空数据库上的其他迁移时不存在权限匹配查询。
我正在使用 python 3.4 和 django 1.7.2
哦。 4年后...
要创建权限,Django 使用 post_migrate 信号。
因此,当运行一次全部迁移时,权限还不存在。
因此,你可以把你的功能拿出来,比如在管理命令中
不过,您仍然可以这样做:
from django.contrib.auth.management import create_permissions
APPS = [
...your app labels
]
def create_applications_permissions():
for app in APPS:
app_config = django_apps.get_app_config(app)
create_permissions(app_config)
def load_data(apps, schema_editor):
create_applications_permissions()
Permission = apps.get_model('auth', 'Permission')
Group = apps.get_model('auth', 'Group')
can_add = Permission.objects.get(codename='add_game')
developers = Group.objects.create(name='Developer')
developers.permissions.add(can_add)
developers.save()
class Migration(migrations.Migration):
dependencies = [
('myApp', '0004_game'),
]
operations = [
migrations.RunPython(load_data),
]
并且创建权限不使用传递给迁移的应用程序。不会通过 create_permissions
:
的检查
if not app_config.models_module:
return
但是你要小心。
希望有人有用。
我正在尝试创建一个 auth.Group 具有自动迁移权限的文件。我的问题是,当我 运行 在空数据库上迁移时,试图将权限附加到组的迁移找不到权限。如果我以较早的迁移为目标,以便迁移退出时没有错误,则权限会出现在数据库中,之后迁移代码可以找到该权限。那么,当迁移 运行 背靠背时,我该怎么做才能使迁移引用在早期迁移中创建的权限?
def load_data(apps, schema_editor):
Permission = apps.get_model('auth', 'Permission')
Group = apps.get_model('auth', 'Group')
can_add = Permission.objects.get(codename='add_game')
developers = Group.objects.create(name='Developer')
developers.permissions.add(can_add)
developers.save()
class Migration(migrations.Migration):
dependencies = [
('myApp', '0004_game'),
]
operations = [
migrations.RunPython(load_data),
]
游戏模型是在较早的迁移中创建的。此代码总是导致错误,指出当我 运行 它与空数据库上的其他迁移时不存在权限匹配查询。 我正在使用 python 3.4 和 django 1.7.2
哦。 4年后... 要创建权限,Django 使用 post_migrate 信号。
因此,当运行一次全部迁移时,权限还不存在。
因此,你可以把你的功能拿出来,比如在管理命令中
不过,您仍然可以这样做:
from django.contrib.auth.management import create_permissions
APPS = [
...your app labels
]
def create_applications_permissions():
for app in APPS:
app_config = django_apps.get_app_config(app)
create_permissions(app_config)
def load_data(apps, schema_editor):
create_applications_permissions()
Permission = apps.get_model('auth', 'Permission')
Group = apps.get_model('auth', 'Group')
can_add = Permission.objects.get(codename='add_game')
developers = Group.objects.create(name='Developer')
developers.permissions.add(can_add)
developers.save()
class Migration(migrations.Migration):
dependencies = [
('myApp', '0004_game'),
]
operations = [
migrations.RunPython(load_data),
]
并且创建权限不使用传递给迁移的应用程序。不会通过 create_permissions
:
if not app_config.models_module:
return
但是你要小心。
希望有人有用。