3 changed files with 43 additions and 0 deletions
@ -0,0 +1,43 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
|
||||||
|
"""Add permissions for proxy model. |
||||||
|
|
||||||
|
This is needed because of the bug https://code.djangoproject.com/ticket/11154 |
||||||
|
in Django (as of 1.6, it's not fixed). |
||||||
|
|
||||||
|
When a permission is created for a proxy model, it actually creates if for it's |
||||||
|
base model app_label (eg: for "article" instead of "about", for the About proxy |
||||||
|
model). |
||||||
|
|
||||||
|
What we need, however, is that the permission be created for the proxy model |
||||||
|
itself, in order to have the proper entries displayed in the admin. |
||||||
|
|
||||||
|
Source: https://gist.github.com/magopian/7543724 |
||||||
|
""" |
||||||
|
|
||||||
|
import sys |
||||||
|
|
||||||
|
from django.apps import apps |
||||||
|
from django.contrib.auth.management import _get_all_permissions |
||||||
|
from django.contrib.auth.models import Permission |
||||||
|
from django.contrib.contenttypes.models import ContentType |
||||||
|
from django.core.management.base import BaseCommand |
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand): |
||||||
|
help = "Fix permissions for proxy models." |
||||||
|
|
||||||
|
def handle(self, *args, **options): |
||||||
|
for model in apps.get_models(): |
||||||
|
opts = model._meta |
||||||
|
ctype, created = ContentType.objects.get_or_create( |
||||||
|
app_label=opts.app_label, |
||||||
|
model=opts.object_name.lower()) |
||||||
|
|
||||||
|
for codename, name in _get_all_permissions(opts): |
||||||
|
p, created = Permission.objects.get_or_create( |
||||||
|
codename=codename, |
||||||
|
content_type=ctype, |
||||||
|
defaults={'name': name}) |
||||||
|
if created: |
||||||
|
sys.stdout.write('Adding permission {}\n'.format(p)) |
Loading…
Reference in new issue