环境
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()