我儘量按照這個教程「Programmatically creating a group : Can't access permissions from migration」,我的代碼是:如何自動在Django創建組1.11.2
# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-10-16 13:48
from __future__ import unicode_literals
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)
# Criando Administrador
group, created = Group.objects.get_or_create(name='Administrador')
if created:
add_thing = Permission.objects.get(
codename=['can_add_permision',
'can_change_permission',
'can_add_user',
'can_change_user',
'can_add_video',
'can_change_video',
'can_delete_video',
'can_add_documents',
'can_change_documents',
'can_delete_documents',
'can_add_news',
'can_change_news',
'can_delete_news',
'can_add_basics',
'can_change_basics',
'can_add_board',
'can_change_board',
'can_delete_board',
'can_add_history',
'can_change_history',
'can_delete_history',
'can_add_shortcuts',
'can_change_shortcuts',
'can_delete_shortcuts',]
)
group.permissions.add(add_thing)
group.save()
logger.info('Grupo Administrador Criado')
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.RunPython(add_group_permissions),
]
而且我的錯誤是:
self.model._meta.object_name django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.
是它可能是問題與dependencies
相關?或者我該怎麼做?
[UPDATE 1]
後@Trilliput的提示組創建空的。
[更新2]
我去掉前綴can_
,之後使用@Trilliput的技巧,利用殼python manage.py shell
from django.contrib.auth.models import Permission
permissions_qs = Permission.objects.filter(codename__in=['add_permission', 'change_permission', 'add_user', 'change_user', 'add_video', 'change_video', 'delete_video', 'add_documents', 'change_documents', 'delete_documents', 'add_news', 'change_news', 'delete_news', 'add_basics', 'change_basics', 'add_board', 'change_board', 'delete_board', 'add_history', 'change_history', 'delete_history', 'add_shortcuts', 'change_shortcuts', 'delete_shortcuts',])
permissions_qs.count()
>>> 24
我保存的文件0001.initial.py
和運行python manage.py migrate
但沒有做過。
我如何被迫再次跑步?
[更新3]
完整的代碼,而且運作非常良好。
# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-10-16 13:48
from __future__ import unicode_literals
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)
# Criando Administrador
group, created = Group.objects.get_or_create(name='Administrador')
if created:
permissions_qs = Permission.objects.filter(
codename__in=['add_permission',
'change_permission',
'add_user',
'change_user',
'add_video',
'change_video',
'delete_video',
'add_documents',
'change_documents',
'delete_documents',
'add_news',
'change_news',
'delete_news',
'add_basics',
'change_basics',
'add_board',
'change_board',
'delete_board',
'add_history',
'change_history',
'delete_history',
'add_shortcuts',
'change_shortcuts',
'delete_shortcuts',]
)
group.permissions = permissions_qs
group.save()
class Migration(migrations.Migration):
dependencies = [
('cursos', '0001_initial')
]
operations = [
migrations.RunPython(add_group_permissions),
]
更新我的代碼後,我跑了,像小費@Trilliput:
manage.py migrate login zero --fake
- 刪除該組
manage.py migrate login
工作部分'cuz組創建空。謝謝! –
@JulianoAraújo請確保您確實擁有所有權限。嘗試調用Django控制檯'Permissions.objects.filter(codename__in = ['can_add_permision',...,'can_delete_shortcuts',])。count()' – Trilliput
@JulianoAraújo順便說一句,如果你想要所有的權限你可以使用'group.permissions = Permissions.objects.all()' – Trilliput