ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Django admin】继承并扩展 AbstractUser, Group

2022-07-08 01:32:25  阅读:201  来源: 互联网

标签:Group name admin db auth AbstractUser models import


# models.py   

from django.db import models

from django.contrib.auth.models import AbstractUser,Group,Permission # 这里也可以扩展权限表 就不演示了


# 继承admin用户表 并且扩展
class AdminUser(AbstractUser):

    admin_name = models.CharField(max_length=25,verbose_name="昵称",null=True,blank=True)

    # def __str__(self):
    #     return self.username

    class Meta:
        db_table = 'auth_admin_user'
        verbose_name_plural = "管理员信息"


# 继承admin 分组表
class AdminGroup(Group):

    roles = models.CharField(max_length=25,verbose_name="角色",null=True,blank=True)

    # def __str__(self):
    #     return self.roles

    class Meta:
        db_table = 'auth_admin_roles'
        verbose_name_plural = "角色信息"

 

 

 

 

# admin.py 

from django.contrib import admin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm, AdminPasswordChangeForm
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Group, Permission

from app.custom_auth.models import AdminUser,AdminGroup


# django/contrib/auth/admin/UserAdmin  这里的ADMIN源码直接搬过来进行配置

# 重写用户展示字段
@admin.register(AdminUser)
class UserAdmin(admin.ModelAdmin):

    add_form_template = 'admin/auth/user/add_form.html'
    change_user_password_template = None
    fieldsets = (
        # 管理员界面  第一板块展示
        (None, {'fields': ('username', 'password',)}),
        # 管理员界面  第二板块展示
        (('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'admin_name')}),
        # 管理员界面  第三板块展示
        (('Permissions'), {
            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'),
        }),
        (('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )

    form = UserChangeForm
    add_form = UserCreationForm
    change_password_form = AdminPasswordChangeForm
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff','admin_name',)
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups')
    search_fields = ('username', 'first_name', 'last_name', 'email')
    ordering = ('username',)
    filter_horizontal = ('groups', 'user_permissions',)



# 重写组admin
@admin.register(AdminGroup)
class GroupAdmin(admin.ModelAdmin):

    search_fields = ('roles',)
    list_display = ('roles',)
    ordering = ('roles',)
    filter_horizontal = ('permissions',)

    def formfield_for_manytomany(self, db_field, request=None, **kwargs):
        if db_field.name == 'permissions':
            qs = kwargs.get('queryset', db_field.remote_field.model.objects)
            # Avoid a major performance hit resolving permission names which
            # triggers a content_type load:
            kwargs['queryset'] = qs.select_related('content_type')
        return super().formfield_for_manytomany(db_field, request=request, **kwargs)

 

 

# settings.py

INSTALLED_APPS = [

    'app.custom_auth', # 这是我的应用名称

]


# 用于外键
AUTH_USER_MODEL = 'custom_auth.AdminUser'

 

标签:Group,name,admin,db,auth,AbstractUser,models,import
来源: https://www.cnblogs.com/wanghong1994/p/16456795.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有