Скрытие одного из наборов полей User.ModelAdmin.fieldset при изменении роли пользователя в django
Здравствуйте, я хочу скрыть некоторые наборы полей в админке при изменении роли пользователя.
В get_queryset() я изменяю набор запросов, если role == 'CMS' я также хочу скрыть Permission набор полей для той же роли.
Вот моя админка:
Примечание: я использую список для наборов полей здесь я вставил тупл
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import Permission
from .models import BankAccount
from addresses.models import Address
User = get_user_model()
class AddressInline(admin.TabularInline):
model = Address
extra = 0
@admin.register(User)
class UserAdmin(BaseUserAdmin):
list_display = (
'id', 'full_name', 'email', 'gender', 'role',
)
list_filter = (
'gender', 'is_staff', 'is_superuser', 'is_active',
)
list_display_links = (
'full_name', 'email',
)
search_fields = (
'email', 'first_name', 'last_name', 'phone_number',
)
readonly_fields = (
'created', 'updated',
)
ordering = ('first_name', 'email', 'last_name',)
fieldsets = [
['Credentials', {'fields': ['email', 'phone_number', 'password']}],
['Info', {'fields': ['first_name', 'last_name', 'gender', 'role', 'profile_pic', 'created', 'updated']}],
]
add_fieldsets = (
('Credentials', {'fields': ('email', 'phone_number', 'password1', 'password2')}),
('Info', {'fields': ('first_name', 'last_name', 'gender', 'role', 'profile_pic')}),
('Permissions', {'fields': ('is_vendor', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
)
inlines = (AddressInline,)
def full_name(self, obj=None):
return f'{obj.first_name} {obj.last_name}'
def get_queryset(self, request):
if request.user.role == 'CMS':
return self.model.objects.filter(
role='CUSTOMER', is_staff=False, is_superuser=False
)
else:
return self.model.objects.all()
admin.site.register(Permission)
admin.site.register(BankAccount)
В этой админке, в get_queryset() здесь я меняю кверисет, если роль "CMS".
То же самое, я не хочу отображать раздел Permission из опции fieldsets.
Я попробовал несколько вариантов списка и некоторые трюки, как в приведенном ниже примере функции:
def get_queryset(self, request):
if request.user.role == 'CMS' and request.user.is_superuser==False:
if not any('Permissions' in set for set in self.fieldsets):
self.fieldsets += [['Permissions', {'fields': ['is_active',]}]]
return self.model.objects.filter(
role='CUSTOMER', is_staff=False, is_superuser=False
)
else:
if not any('Permissions' in set for set in self.fieldsets):
self.fieldsets += [['Permissions', {'fields': ['is_vendor', 'is_staff', 'is_superuser', 'is_active', 'groups', 'user_permissions']}]]
return self.model.objects.all()
Это дает результаты на моей локальной машине, но не на рабочем сервере. На рабочем сервере секция permission повторяется, даже если добавлено условие then.
Это потому, что я добавляю это на list_user странице, а не на change_user странице администратора. Если да, то как я могу это исправить?
Как я могу этого добиться? Заранее спасибо