Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法
2018-09-28 19:48
781 查看
Django用户继承AbstractUser后密码为明文
其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段。
造成这个原因是因为在admin注册的生活没有指定Admin
在app的admin.py里面
from django.contrib.auth.admin import UserAdmin admin.site.register(UserProfile, UserAdmin)
下面是重点,UserProfileAdmin继承UserAdmin
model
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. # 继承原有user并且添加自定义user数据表 class UserProfile(AbstractUser): ACCOUNT_TYPE = ( ('advertiser', '广告主'), ('advertiser_agent', '广告主代理'), ('inside_staff', '公司内部员工') ) ADVERTISEMENT_TYPE = ( ('网赚类广告', '网赚类广告'), ('棋牌类广告', '棋牌类广告'), ('互动类广告', '互动类广告'), ('健康类广告', '健康类广告'), ) account_person = models.IntegerField(verbose_name='建账号人', null=True, blank=True) if_show_gift_account = models.BooleanField(verbose_name='是否显示赠送金额', default=False) advertisement_type = models.CharField(verbose_name='广告类型', max_length=20, choices=ADVERTISEMENT_TYPE, null=True, blank=True) account_type = models.CharField(verbose_name='账号类型', max_length=20, choices=ACCOUNT_TYPE, default="advertiser") nick_name = models.CharField(max_length=50, verbose_name=u"昵称", null=True, blank=True) gender = models.CharField(verbose_name='性别', max_length=6, choices=(("male", u"男"), ("female", "女")), default="male") address = models.CharField(verbose_name='地址', max_length=100, null=True, blank=True) mobile = models.CharField(verbose_name='电话', max_length=11, null=True, blank=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "广告主信息" verbose_name_plural = verbose_name permissions = ( ('view_userprofile', 'view_userprofile'), ) def __str__(self): return self.username
Admin注册
from django.contrib import admin from .models import UserProfile from django.contrib.auth.hashers import make_password from django.contrib.auth.models import User, Group,Permission from users.forms import UserProfileForm from rest_framework.response import Response from rest_framework import status from django.contrib.auth.admin import UserAdmin class UserProfileAdmin(UserAdmin): # form = UserProfileForm # FIXME 非管理员自定义返回fieldsets zdy_fieldsets = [(None, {'classes': ('wide', 'extrapretty'), 'fields': ('username', 'password', 'if_show_gift_account', 'advertisement_type')})] list_display = ('username', 'nick_name', 'account_type', 'if_show_gift_account', 'advertisement_type') list_filter = ('is_staff', 'is_superuser') #exclude = ('account_person','user_permissions',) def get_queryset(self, request): """ admin 根据不同用户显示表格内容 :param request: :return: . """ user_id = request.user.id userporfile = UserProfile.objects.get(id=user_id) # print(userporfile.account_type) if userporfile.account_type == 'advertiser_agent': qs = super().get_queryset(request) return qs.filter(account_person=user_id) else: return UserProfile.objects.all() def changelist_view(self, request, extra_context=None): """ 根据不同用户 显示list_display :param request: :param extra_context: :return: """ user_id = request.user.id userporfile = UserProfile.objects.get(id=user_id) # print(userporfile.account_type) if userporfile.account_type != 'advertiser_agent': self.list_display = ['username', 'nick_name','advertisement_type','if_show_gift_account'] else: self.list_display = ['username', 'nick_name'] return super(UserProfileAdmin, self).changelist_view(request, extra_context=None) def get_readonly_fields(self, request, obj=None): """ 设置只读字段 :param request: :param obj: :return: """ if not request.user.is_superuser and request.user.has_perm('users.view_userprofile'): return [f.name for f in self.model._meta.fields] return [] # FIXME 继承UserAdmin 重写get_fieldsets 方法指定显示哪些字段 def get_fieldsets(self, request, obj=None): """ 显示指定字段 :param request: :param obj: :return: """ if request.user.is_superuser: return super(UserAdmin, self).get_fieldsets(request, obj) else: return self.zdy_fieldsets
注册信息
admin.site.register(UserProfile, UserProfileAdmin)
相关文章推荐
- 继承或者重写django的user model?
- django admin添加数据自动记录user到表中的实现方法
- 继承ViewGroup后的子类如何重写onMeasure方法
- Django 继承模板应用CSS文件方法
- JAVA中子类是否可以可以继承、重写父类的静态方法--总结
- 关于继承时子类重写父类方法和覆盖父类变量的若干问题 (待进一步研究)
- win32平台下:cocos2d-x中继承并重写CCTextFieldTTF类,实现密码框输入时,*显示
- 子类继承父类重写静态方法不能变成普通方法
- Java继承中方法重写与this问题
- java中继承期间父子类型的初始化顺序以及重写方法的调用规则
- RegisterUserFunc为测试对象添加新方法或重写已有方法
- 继承中方法的重写和抽象类
- 继承ViewGroup:重写onMeasure方法和onLayout方法
- 笔记整理 静态与非静态 继承哪一些 继承链 重写 属性方法重载 PDO
- 继承ViewGroup:重写onMeasure方法和onLayout方法
- 构造器、方法重载、继承、方法重写、自动转型、多态课堂笔记
- .net知识和学习方法系列(四)继承中方法的隐藏和重写
- 忘记Django登陆账号和密码的处理方法
- 类、方法 类的继承与方法重写