Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos-users / admin.py
Size: Mime:
from django.contrib.auth import admin as auth_admin
from django.contrib.auth import get_user_model

from .forms import UserChangeForm, UserCreationForm

User = get_user_model()


class KaosUserAdmin(auth_admin.UserAdmin):
    form = UserChangeForm
    add_form = UserCreationForm
    list_display = ('username', 'first_name', 'last_name', 'is_active', 'is_staff')
    search_fields = ('username', 'first_name', 'last_name')
    list_filter = ('is_staff', 'is_active')
    readonly_fields = ('date_joined', 'last_login',)

    fieldsets = auth_admin.UserAdmin.fieldsets[:2] + (
        ('Media', {'fields': ('avatar',)}),
    ) + auth_admin.UserAdmin.fieldsets[2:]

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        if request.user.is_superuser:
            return queryset
        return queryset.filter(is_superuser=False)

    def get_fieldsets(self, request, obj=None):
        exclude = self.get_exclude(request, obj)
        fieldsets = super().get_fieldsets(request, obj)
        return [
            (fieldset_name,
             {'fields': [field for field in values['fields'] if field not in exclude]})
            for fieldset_name, values in fieldsets
        ]

    def get_exclude(self, request, obj=None):
        exclude = super().get_exclude(request, obj)
        if exclude:
            exclude = list(exclude)
        else:
            exclude = []

        if request.user.is_superuser:
            return exclude

        exclude += [
            'is_superuser',
            'user_permissions'
        ]

        if obj and obj.is_superuser:
            exclude += ['password']
        return exclude

    def has_delete_permission(self, request, obj=None):
        if request.user.is_superuser:
            return True
        return False