You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台视图逻辑修改:按用户权限展示商品实例

实现方法

最直接的方式就是自定义ModelAdmin并重写get_queryset方法,直接调整后台的查询逻辑,完全匹配你的需求:

  1. 在项目的admin.py文件中,创建自定义的ModelAdmin类,重写get_queryset方法:
from django.contrib import admin
from .models import GoodsDetails

class GoodsDetailsAdmin(admin.ModelAdmin):
    list_display = ('serial_number', 'goods_description', 'quantity', 'gross_weight', 'is_active')  # 可选,配置后台列表显示的字段

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        # 超级用户返回所有实例,普通用户只返回is_active=False的记录
        if request.user.is_superuser:
            return qs
        return qs.filter(is_active=False)

# 注册自定义的ModelAdmin到模型
admin.site.register(GoodsDetails, GoodsDetailsAdmin)
  1. 保存代码后重启Django服务,后台就会按规则展示数据:
    • 超级用户登录后能查看所有GoodsDetails实例
    • 普通用户登录后仅能查看is_active=False的实例

其他可选方案

如果想通过权限控制实现更灵活的规则,也可以自定义权限后结合判断逻辑:

# 先在模型中添加自定义权限
class GoodsDetails(models.Model):
    # 原有字段...
    
    class Meta:
        permissions = [
            ("view_all_goods", "Can view all goods instances"),
        ]

# 然后在Admin中调整查询逻辑
class GoodsDetailsAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        # 超级用户或拥有自定义权限的用户可查看全部数据
        if request.user.has_perm('yourapp.view_all_goods') or request.user.is_superuser:
            return qs
        return qs.filter(is_active=False)

这种方式可以给特定普通用户分配查看全部数据的权限,比单纯依赖超级用户身份更灵活。

内容的提问来源于stack exchange,提问作者Adarsh Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:18:11