Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法

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)

 


 

posted on 2018-09-28 19:48  星河赵  阅读(1114)  评论(0编辑  收藏  举报

导航