作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试按照此 tutorial 添加新的迁移
我在 Meta
中添加了新权限进入 permissions
field 。然后我创建了迁移并尝试修改此迁移以更新组权限。但是得到了DoesNotExist
在 RunPython
手术。
from django.db import migrations
def assign_new_permission(apps, *args):
Permission = apps.get_model('auth.Permission')
Group = apps.get_model('auth.Group')
# __fake__.DoesNotExist: Permission matching query does not exist.
new_permission = Permission.objects.get(
codename='my_new_permissoin_code')
admins = Group.objects.get(name='Group name')
admins.permissions.add(new_permission)
class Migration(migrations.Migration):
dependencies = [
('my_app', '0066_some_migratoin'),
]
operations = [
migrations.AlterModelOptions(
name='my_model',
options={'permissions': (('my_new_permissoin_code',
'Permission name'),)},
),
migrations.RunPython(assign_new_permission)
]
最佳答案
我认为您的问题出现是因为权限实际上不是在单个迁移期间或之后创建的,而是由在 python manage.py migrate
之后发送的迁移后信号触发的。命令成功完成(请参阅对已接受答案的评论 here 。)
有几种方法可以解决它:
python manage.py migrate
运行它们。命令:python manage.py migrate my_app 0066_create_permissions
python manage.py migrate my_app 0067_assign_permissions
operations
考虑到这一点。这样做的一个好处是,如果需要,您还可以创建一个或多个 Python 函数来反转迁移,这对于 #3 或 #4 来说实际上是不可能的。 from django.apps import apps as django_apps
def guardian_post_migrate_signal(apps, schema_editor):
guardian_config = django_apps.get_app_config('guardian')
models.signals.post_migrate.send(
sender=guardian_config,
app_config=guardian_config,
verbosity=2,
interactive=False,
using=schema_editor.connection.alias,
)
django.contrib.auth.management.create_permissions
的函数。 (归功于 this post )并直接在您的迁移中使用它:from django.contrib.auth.management import create_permissions
def create_perms(apps, schema_editor):
for app_config in apps.get_app_configs():
app_config.models_module = True
create_permissions(app_config, apps=apps, verbosity=0)
app_config.models_module = None
operations
看起来像: operations = [
migrations.AlterModelOptions(
name='my_model',
options={'permissions': (('my_new_permission_code', 'Permission name'),)},
),
migrations.RunPython(create_perms),
migrations.RunPython(assign_perms)
]
关于django - 为什么我不能在 Django 的同一个迁移中为组分配新的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114505/
我是一名优秀的程序员,十分优秀!