环境

Python 3.7.6
Django 2.2.16

实例

以资产管理系统示例。
Asset:一个资产应该仅可被创建人 creator,操作人 operator,使用人(归属人) belong_people(与 Django-admin 内置 User 模型进行区分)查看。
Asset 中 creator,operator,belong_people 均通过外键与 User 相关联。
相关模型代码:略。admin.py 实例代码如下:

from django.contrib import admin
from .model import *


@admin.register(Asset)
class AssetAdmin(admin.ModelAdmin)
    list_display = ['name', 'price', 'detail']

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser: # 如果是超级用户,则返回所有资产信息。
            return qs
        else: # 否则对 queryset 进行筛选并去重,仅返回请求用户可查看的资产信息。
            return qs.filter(Q(operator=request.user) | Q(creator=request.user) | Q(belong_people=request.user)).distinct()
最后修改:2020 年 11 月 13 日 10 : 51 PM
如果觉得文章帮助了您,您可以随意赞赏。