TasksManager/apps/tasks/admin.py

166 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import re
from django.contrib import admin
from django.utils.html import format_html
from . import models
from apps.users.models import TaskProperty, User
class TodoInline(admin.StackedInline):
# 在Inline中同样筛选仅本部门的承办人、协办人
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'related_task':
kwargs["queryset"] = models.Task.objects.filter(department=request.user.department)
elif db_field.name == 'main_executor':
kwargs["queryset"] = User.objects.filter(department=request.user.department)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == 'sub_executor':
kwargs["queryset"] = User.objects.filter(department=request.user.department)
return super().formfield_for_manytomany(db_field, request, **kwargs)
model = models.Todo
extra = 0
# classes = ['collapse']
class TaskAdmin(admin.ModelAdmin):
# def formfield_for_manytomany(self, db_field, request, **kwargs):
# if db_field.name == "related_task":
# ori_path = request.path
# f_id = re.sub("\D", "", ori_path)
# try:
# kwargs["queryset"] = models.Task.objects.get(id=f_id).related_task
# return super().formfield_for_manytomany(db_field, request, **kwargs)
# except:
# pass
# # kwargs["queryset"] = models.Task.objects.get(id=2).related_task
# 所属单位默认为访问用户的部门
def get_changeform_initial_data(self, request):
return {'department': request.user.department}
# 年度任务编辑界面仅显示本部门的任务属性
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'task_property':
kwargs["queryset"] = TaskProperty.objects.filter(own_department=request.user.department)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
# 仅显示当前部门的年度任务,除非为超管
def get_queryset(self, request):
qs = super(TaskAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(department=request.user.department)
list_display = (
'task_property', 'task_id', 'task_topic', 'task_origin', 'aim_value', 'deadline', 'duty_group', 'principal',
'leader', 'task_note',
)
fieldsets = (
(None, {
'fields': (
('task_property', 'task_id', 'task_topic', 'task_origin', 'aim_value', 'deadline', 'duty_group',
'principal', 'leader'),
'task_note', 'department'),
}),
)
inlines = [TodoInline]
raw_id_fields = ("principal", "leader",)
list_display_links = ('task_topic',)
# autocomplete_fields = ('related_task',)
# search_fields = ('related_task',)
class TodoAdmin(admin.ModelAdmin):
# 工作包页面仅显示所属本部门的年度任务、承办人、协办人
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'related_task':
kwargs["queryset"] = models.Task.objects.filter(department=request.user.department)
elif db_field.name == 'main_executor':
kwargs["queryset"] = User.objects.filter(department=request.user.department)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == 'sub_executor':
kwargs["queryset"] = User.objects.filter(department=request.user.department)
return super().formfield_for_manytomany(db_field, request, **kwargs)
# 仅显示当前部门的工作包,除非为超管
def get_queryset(self, request):
qs = super(TodoAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(related_task__department=request.user.department)
fieldsets = [
(None, {
'fields': [
'related_task', 'todo_topic', 'todo_note', 'deadline', 'duty_group', 'main_executor', 'sub_executor',
'predict_work', 'evaluate_factor',
],
'description': 'aaa'
}),
(None, {
'fields': [],
}),
]
list_display = (
'todo_topic',
'deadline',
'todo_note',
'task_id',
'task_origin',
'lined_task',
# 'duty_department',
'duty_group',
'main_executor',
'list_sub_executor',
'maturity',
'real_work',
'complete_note',
'quality_mark',
)
list_editable = ['quality_mark']
list_filter = ('deadline',)
list_display_links = ('todo_topic', 'deadline', )
date_hierarchy = 'deadline'
list_per_page = 70 # 目的是取消自动分页好像有bug
# raw_id_fields = ("sub_executor",)
search_fields = ('todo_topic',)
ordering = ('related_task', )
def approval_state(self, obj):
return format_html('<span style="color:{};">{}</span>', 'green', obj.approval)
def task_id(self, obj):
return obj.task_id
task_id.admin_order_field = 'related_task__task_id'
task_id.short_description = '任务编号'
def task_origin(self, obj):
return obj.task_origin
task_origin.short_description = '任务来源'
def duty_department(self, obj):
return obj.duty_group
duty_department.short_description = '责任部门'
def lined_task(self, obj):
return obj.related_task
lined_task.short_description = '任务名称'
# TODO 任务编辑界面按部门显示
admin.site.register(models.Task, TaskAdmin)
admin.site.register(models.Todo, TodoAdmin)