from django.contrib import admin from django.contrib.auth import get_user_model from lunarlink.models import Project # Register your models here. Users = get_user_model() class ProjectAdmin(admin.ModelAdmin): # 列表要显示的字段 list_display = ( "name", "responsible", "get_groups", "get_creator_name", "get_updater_name", "create_time", "update_time", ) def get_creator_name(self, obj): """返回项目创建者的名字""" return obj.creator.name if obj.creator else "-" def get_updater_name(self, obj): """返回项目创建者的名字""" user = Users.objects.filter(id=obj.updater).first() return user.name if user else "-" get_creator_name.short_description = "创建人" get_updater_name.short_description = "更新人" def get_groups(self, obj): """返回项目所属的所有分组""" return ", ".join([group.name for group in obj.groups.all()]) get_groups.short_description = "所属分组" def has_add_permission(self, request): return False # 移除增加按钮 def has_delete_permission(self, request, obj=None): return False # 移除删除按钮 # 指定在编辑页面上要显示的字段 fields = [ "name", "desc", "responsible", "yapi_base_url", "yapi_openapi_token", "jira_project_key", "jira_bearer_token", "groups", ] # 指定不可编辑的字段 readonly_fields = ("responsible",) # 为ManyToMany字段提供一个水平滚动选择器 filter_horizontal = ("groups",) def get_queryset(self, request): # 获取原始的queryset qs = super().get_queryset(request) # 如果是超级管理员,返回所有项目 if request.user.is_superuser: return qs # 获取当前用户所在的所有分组 user_groups = request.user.groups.all() # 基于分组来过滤项目 return qs.filter(groups__in=user_groups).distinct() admin.site.register(Project, ProjectAdmin)