Finally overrite a UserAdmin ModelAdmin:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.utils.translation import ugettext, ugettext_lazy as _
from django.core.exceptions import PermissionDenied


class UserAdmin(admin.ModelAdmin):
    actions = ['delete_model']
    def get_fieldsets(self, request, obj=None):
        if not obj:
            return self.add_fieldsets


        if request.user.is_superuser:
            perm_fields = ('is_active', 'is_staff', 'is_superuser',
                           'groups', 'user_permissions')
        else:
            # modify these to suit the fields you want your
            # staff user to be able to edit
            perm_fields = ('is_active', 'is_staff', 'groups')


        return [(None, {'fields': ('username', 'password')}),
                (_('Personal info'), {'fields': ('first_name', 'last_name', 
'email')}),
                (_('Permissions'), {'fields': perm_fields}),
                (_('Important dates'), {'fields': ('last_login', 
'date_joined')})]


    # Prevent super user edition for no super users
    def save_model(self, request, obj, form, change):
        print 'save_model'
        if not change:
            # New user
            obj.save()
        else:
            # Update user
            if obj.is_superuser:
                if request.user.is_superuser:
                    obj.save()
                else:
                    raise PermissionDenied
            else:
                obj.save()


    def get_actions(self, request):
        actions = super(UserAdmin, self).get_actions(request)
        del actions['delete_selected']
        return actions


    # Prevent super user deletion for no super users  
    def delete_model(modeladmin, request, queryset):
        for obj in queryset:
            if obj.is_superuser:
                if request.user.is_superuser:
                    # obj.delete()
                else:
                    raise PermissionDenied
            else:
                # obj.delete()
    delete_model.short_description = 'Eliminar usuario/s seleccionados'


El miércoles, 9 de septiembre de 2015, 12:00:18 (UTC+2), Xavier Palacín 
Ayuso escribió:
>
> I want to collects current user in model signal pre_save, to prevent 
> remove super user permission to current super users.
> As I have now so I can not give administrative privileges to a normal user.
>
> from django.db.models.signals import pre_delete, pre_save, post_save
> from django.dispatch.dispatcher import receiver
> from django.contrib.auth.models import User
> from django.core.exceptions import PermissionDenied
>
>
> @receiver(pre_save, sender=User)
> def save_user(sender, instance, **kwargs):
>     if instance._state.adding is True:
>         # we would need to create the object
>         print "Creating an object"
>     else:
>         #we are updating the object
>         if instance.is_superuser:
>             raise PermissionDenied
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/8774dcd4-4018-46eb-96f7-a1095cb2eb05%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to