2011-07-05 12 views
7

¿Hay alguna posibilidad de cambiar la lista de permisos en la página de edición del usuario? No deseo mostrar todos los permisos, por ejemplo, la entrada del registro de administración o el grupo de autenticación, etc. ¿Cómo puedo modificar un conjunto de preguntas principal para excluir parte de él?Administrador de Django - cambiar la lista de permisos

Respuesta

9

Recibí la idea de this topic, que también responde a su pregunta, pero no está tan claro.

Tiene que sobrescribir el conjunto de consulta de permisos de usuario en el formulario UserAdmin utilizado para la visualización.

Para ello, la manera más fácil es crear una subclase de UserAdmin y sobrescribir el get_form método:

from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 

class MyUserAdmin(UserAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     # Get form from original UserAdmin. 
     form = super(MyUserAdmin, self).get_form(request, obj, **kwargs) 
     if 'user_permissions' in form.base_fields: 
      permissions = form.base_fields['user_permissions'] 
      permissions.queryset = permissions.queryset.filter(content_type__name='log entry') 
     return form 

Puede cambiar el filtro del conjunto de consultas para lo que quiera: Ejemplos:

# Exclude admin and auth.  
permissions.queryset = permissions.queryset.exclude(content_type__app_label__in=['admin', 'auth']) 

# Only view permissions of desired models (Can be your models or Django's) 
permissions.queryset = permissions.queryset.filter(content_type__model__in=['blog', 'post', 'user', 'group']) 

Después de crear su clase, se tiene que registrar su modelo de usuario junto con el administrador de nueva creación:

admin.site.unregister(User) # You must unregister first 
admin.site.register(User, MyUserAdmin) 

Editar: He añadido el comentario de Maik Hoepfel, porque este código hizo que django se bloqueara al crear un nuevo usuario.


Puede hacer lo mismo con la lista de permisos en su página de edición de grupo, pero hay que crear otra administración que se extiende desde GroupAdmin, y cambiar form.base_fields['user_permissions'] con form.base_fields['permissions']

4

respuesta de Renato es casi perfecta. El administrador de Django hace que agregar a un usuario un proceso de dos pasos con el mismo formulario, y su código falla con un error de clave para 'user_permissions' en el primer paso.

La solución es bastante fácil, sólo tiene que utilizar el código de abajo en su lugar:

def get_form(self, request, obj=None, **kwargs): 
    form = super(MyUserAdmin, self).get_form(request, obj, **kwargs) 
    # adding a User via the Admin doesn't include the permissions at first 
    if 'user_permissions' in form.base_fields: 
     permissions = form.base_fields['user_permissions'] 
     permissions.queryset = permissions.queryset.filter(content_type__name='log entry') 
    return form 
Cuestiones relacionadas