django中根据用户的权限,显示change_list.html的内容和change_form.html中显示的字段...

应用需求: 设置好用户的权限之后, 用户登录后台之后,需要根据用户的权限,用户属于哪个组,显示哪些成员。 并且进入用户编辑页面之后, 设置显示用户的字段和字段显示方式

 

class MyUserAdmin(UserAdmin):

  def get_queryset(self, request):  //通过get_queryset函数可以过滤出组的成员, 或者这个过滤的规则有你自己定也行
    qs = super(MyUserAdmin, self).get_queryset(request)
    if request.user.is_superuser:
      return qs
    else:
      return qs.filter(groups__name=mall_admin_group) | qs.filter(groups__name=mall_partner_group)

  def get_fieldsets(self, request, obj=None): //通过get_fieldsets 过滤是否在User form page 显示相关字段
    if not obj:
      return self.add_fieldsets
    if request.user.is_superuser:
      perm_fields = ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')
    else:
      perm_fields = ('is_active', 'is_staff', 'groups')

    return [(None, {'fields': ('username', 'password')}), (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), (_('Permissions'), {'fields': perm_fields}), (_('Important dates'), {'fields': ('last_login', 'date_joined')})]

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

应用需求: 对不同组,不同用户设置在change_form.html中字段的可读权限的限制

1 def get_readonly_fields(self, request, obj=None):
2   fields = []
3   user_info = User.objects.filter(groups__name=mall_admin_group).filter(username=request.user.username)
4   # 超级管理员和商城运营人员可以编辑
5   if request.user.is_superuser or user_info.exists():
6     return fields
7   else:
8     fields = ['owner'] //  owner字段无法编辑
9   return fields  

应用需求: 在保存 model object 添加或者改变之前,可以对保存实例做一些限制工作,比如根据用户账号

 1  def save_model(self, request, obj, form, change):
 2         if not change: #add action
 3             owner = obj.owner
 4             partner_list = owner.partner_set.all()
 5             # 新建店铺,每个账号仅限注册一个
 6             if partner_list.exists():
 7                 self.message_user(request, '每个账号只能创建一个店铺', messages.ERROR)
 8             else:
 9                 super(PartnerAdmin, self).save_model(request, obj, form, change)
10         else:#change action
11             super(PartnerAdmin, self).save_model(request, obj, form, change)      

应用需求: 将change_form中,input类型改为kindeditor插件功能。

 1 from django import forms
 2 
 3 class PartnerProductPoolForm(forms.ModelForm):
 4     def __init__(self, *args, **kwargs):
 5         super(PartnerProductPoolForm, self).__init__(*args, **kwargs)
 6         self.fields["introduction"].label = "描述" //将该字段修改为kindeditor的textarea
 7     introduction = forms.CharField(widget=forms.Textarea(attrs={'row': 60, 'cols': 120}))
 8     class Meta:
 9         model = PartnerProductPool
10         fields = '__all__'
11 
12     class Media: //引入需要的js, css文件
13         js = (
14                 'js/jquery-3.2.1.min.js',
15                 'editor/kindeditor-all.js',
16                 'editor/lang/zh-CN.js',
17                 'js/introduction.js'
18             )

  

转载于:https://www.cnblogs.com/learning-skills/p/7519891.html

from django.contrib import admin from django.urls import reverse from django.utils.html import format_html from django.shortcuts import redirect from .models import Drug @admin.register(Drug) class DrugAdmin(admin.ModelAdmin): change_list_template = 'admin/drug/change_list.html' def get_urls(self): urls = super().get_urls() custom_urls = [ path('import-csv/', self.import_csv), ] return custom_urls + urls def import_csv(self, request): if request.method == 'POST': # TODO: import CSV data self.message_user(request, 'CSV data imported successfully') return redirect('..') return render(request, 'admin/drug/import_csv.html') def changelist_view(self, request, extra_context=None): if not request.GET.get('ordering'): # set default ordering request.GET = request.GET.copy() request.GET['ordering'] = 'name' return super().changelist_view(request, extra_context=extra_context) def interaction_display(self, obj): return format_html('<pre>{}</pre>', obj.interaction) interaction_display.short_description = 'Interaction' def get_actions(self, request): actions = super().get_actions(request) del actions['delete_selected'] return actions def delete_model(self, request, obj): # TODO: delete model pass def delete_selected(self, request, queryset): # TODO: delete selected models pass def get_queryset(self, request): qs = super().get_queryset(request) qs = qs.order_by('name') return qs def add_view(self, request, form_url='', extra_context=None): self.change_list_template = None return super().add_view(request, form_url=form_url, extra_context=extra_context) def change_view(self, request, object_id, form_url='', extra_context=None): self.change_list_template = None return super().change_view(request, object_id, form_url=form_url, extra_context=extra_context) def delete_view(self, request, object_id, extra_context=None): self.change_list_template = None return super().delete_view(request, object_id, extra_context=extra_context) 需要添加什么html文件
05-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值