Created
February 5, 2014 02:30
-
-
Save nitely/8816502 to your computer and use it in GitHub Desktop.
Group permissions selection in admin filtered by your app models
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Sometimes you just don't want to display every permission django has, | |
you just want a short list showing the permissions for some of your apps (or even django core apps). | |
GROUP_PERMISSIONS_MODELS must be a list of your app models. | |
Dotted path (in lowercase) required, app name + model class name. | |
tested on Django 1.6 (should work on +1.3) | |
""" | |
#admin.py, you may create a new app, or put it in your "admin" app if you happen to have one. | |
from django.contrib import admin | |
from django.contrib.admin import widgets | |
from django.utils.translation import ugettext_lazy as _ | |
from django import forms | |
from django.contrib.auth.models import Permission, Group | |
from django.db.models import Q | |
from django.conf import settings | |
def get_permissions(): | |
app_models_dict = {} | |
for app_model in settings.GROUP_PERMISSIONS_MODELS: | |
app, model = app_model.split(".") | |
app_models_dict.setdefault(app, []).append(model) | |
q = Q() | |
for app, models in app_models_dict.iteritems(): | |
q |= Q(content_type__app_label=app, content_type__model__in=models) | |
if q: | |
return Permission.objects.filter(q) | |
else: | |
return Permission.objects.all() | |
class GroupAdminForm(forms.ModelForm): | |
permissions = forms.ModelMultipleChoiceField( | |
queryset=get_permissions(), | |
widget=widgets.FilteredSelectMultiple(_('permissions'), False)) | |
class Meta: | |
model = Group | |
class GroupAdmin(admin.ModelAdmin): | |
form = GroupAdminForm | |
search_fields = ('name', ) | |
ordering = ('name', ) | |
admin.site.unregister(Group) | |
admin.site.register(Group, GroupAdmin) | |
# settings.py | |
GROUP_PERMISSIONS_MODELS = ['app1.modelname', 'app2.modelname', ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment