【Django admin】继承并扩展admin中的管理员表与分组表

声明:继承AbstractUser是可以的,但是继承分组扩展会影响到权限分配问题,所以分组扩展推荐使用外键关联

 

# 自定义下的 models.py

from
django.contrib.auth.models import AbstractUser,Group,Permission # 这里也可以扩展权限表 就不演示了 # 继承admin用户表 并且扩展 可以自定义设计额外的字段 class AdminUser(AbstractUser): admin = models.ForeignKey(to="AdminUser",verbose_name="DEMO",on_delete=models.CASCADE) # def __str__(self): # return self.username class Meta: db_table = 'auth_user' verbose_name = "超管用户" verbose_name_plural = "超管用户"

 

 

# 自定义下的 admin.py

from app.custom_auth.models import AdminUser # 自定义添加的modles from django.contrib.auth.admin import UserAdmin # 需要继承它自定义界面 # 重写用户展示字段 @admin.register(AdminUser) class UserInfoAdmin(UserAdmin): # 这里要继承UserAdmin它修改 # 这是在管理页面中想要显示的内容 list_display = ['username', 'first_name', 'admin', 'group', 'date_joined', 'last_login', 'is_staff', ] # 自定义界面分区 fieldsets = ( ("账户信息", {'fields': ('username', 'password',)}), ("个人基本信息", {'fields': ('admin', 'first_name', 'email',)}), ("权限分配", {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups',), }), # ("权限分配", {'fields': ('is_active', 'is_staff', 'is_superuser','group'), }), ("用户活跃信息", {'fields': ('last_login', 'date_joined')}), ) # 显示分配了几个角色 def group(self, user): groups = [] for group in user.groups.all(): groups.append(group.name) return ','.join(groups) group.short_description = '角色' # 重写 获取列表(这个看业务需求) def get_queryset(self, request): qs = super().get_queryset(request) # 如果是超级管理员可以查看全部 如果不是只能查看到当前账号的下级 if request.user.is_superuser: return qs else: return qs.filter(pk=request.user.id) # 这里是要展示的分组的ADMIN配置 根绝自己需求显示 from django.contrib.auth.models import Group class GroupsAdmin(admin.ModelAdmin): list_display = ["name", "pk"] class Meta: model = Group admin.site.unregister(Group) admin.site.register(Group, GroupsAdmin)

 

 

# 这里是分组外键的关联扩展

class RolesGamesCommission(models.Model):

    role = models.ForeignKey(verbose_name="角色",to="auth.Group",on_delete=models.CASCADE)

def __str__(self): return self.uuid class Meta: db_table = 'RolesGamesCommission' verbose_name = "角色扩展" verbose_name_plural = verbose_name

 

posted @ 2022-07-08 01:15  PythonNew_Mr.Wang  Views(584)  Comments(0)    收藏  举报