diff --git a/apps/tasks/admin.py b/apps/tasks/admin.py index 7ac0556..3144ef6 100644 --- a/apps/tasks/admin.py +++ b/apps/tasks/admin.py @@ -4,10 +4,23 @@ from django.contrib import admin from django.utils.html import format_html from . import models -from apps.users.models import TaskProperty +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'] @@ -57,18 +70,26 @@ class TaskAdmin(admin.ModelAdmin): 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) + fieldsets = [ (None, { 'fields': [ 'related_task', 'todo_topic', 'todo_note', 'deadline', 'duty_group', 'main_executor', 'sub_executor', 'predict_work', 'evaluate_factor', - ] + ], + 'description': [] }), (None, { @@ -96,7 +117,7 @@ class TodoAdmin(admin.ModelAdmin): list_display_links = ('todo_topic', 'deadline', ) date_hierarchy = 'deadline' list_per_page = 70 # 目的是取消自动分页,好像有bug - raw_id_fields = ("main_executor", "sub_executor") + # raw_id_fields = ("sub_executor",) search_fields = ('todo_topic',) ordering = ('related_task', ) @@ -120,11 +141,7 @@ class TodoAdmin(admin.ModelAdmin): return obj.related_task lined_task.short_description = '任务名称' -# TODO 增加承办人与协办人只显示本部门人员 # TODO 任务编辑界面按部门显示 -# TODO 修复工作事项显示不下自动分页,取消自动分页 - - admin.site.register(models.Task, TaskAdmin) diff --git a/apps/tasks/forms.py b/apps/tasks/forms.py index 8bc0116..260b031 100644 --- a/apps/tasks/forms.py +++ b/apps/tasks/forms.py @@ -6,11 +6,15 @@ class LoginForm(forms.Form): password = forms.CharField() remember = forms.BooleanField(required=False) + class TodoForm(forms.ModelForm): + required_css_class = 'required' + class Meta: model = Todo fields = ['maturity', 'real_work', 'complete_note'] labels ={'text': ''} widgets = {'rows': '3'} + # TODO 数据不可为空 \ No newline at end of file diff --git a/apps/tasks/views.py b/apps/tasks/views.py index 404738d..34ab1f4 100644 --- a/apps/tasks/views.py +++ b/apps/tasks/views.py @@ -15,7 +15,7 @@ from apps.users.models import User class IndexView(View): @method_decorator(login_required) def get(self, request): - users = User.objects.all() + users = User.objects.filter(department=request.user.department) # points = [] # point = User.objects.all() # for i in point: @@ -39,7 +39,8 @@ class TodoListView(View): class GroupTodoList(View): @method_decorator(login_required) def get(self, request, year=timezone.now().year, month=timezone.now().month): - group_todo = Todo.objects.filter(main_executor__department=request.user.department, deadline__year=year, deadline__month=month) + group_todo = Todo.objects.filter(main_executor__department=request.user.department, deadline__year=year, + deadline__month=month).order_by('related_task_id', 'deadline') date = str(year) + '年' + str(month) + '月' context = {'group_todo': group_todo, 'date': date} return render(request, 'tasks/group_todolist.html', context) @@ -85,7 +86,7 @@ class TodoEntryView(View): form = TodoForm(instance=todo_detail, data=request.POST) if form.is_valid(): form.save() - return redirect('tasks:index') + return redirect('tasks:todolist') # return redirect('tasks:todo_detail', pk=pk) diff --git a/templates/tasks/group_todolist.html b/templates/tasks/group_todolist.html index 43b44c3..0deb800 100644 --- a/templates/tasks/group_todolist.html +++ b/templates/tasks/group_todolist.html @@ -58,10 +58,12 @@ - + + + @@ -81,8 +83,10 @@ + + - + diff --git a/templates/tasks/index.html b/templates/tasks/index.html index 217eb1f..8a8eb5d 100644 --- a/templates/tasks/index.html +++ b/templates/tasks/index.html @@ -90,7 +90,7 @@
-

部门工作统计表

+

本部门工作统计表

## 工作事项 完成时间 工作要求及交付物任务编号任务来源 承办单位 承/督办人 协办人{{ todo.todo_topic }} {{ todo.deadline | date:"m月d日" }} {{ todo.task_id }}{{ todo.task_origin }} {{ todo.duty_group }}{{ todo.main_executor }}{{ todo.main_executor}} {{ todo.sub_executor.all|join:", " }} {{ todo.predict_work }} {{ todo.evaluate_factor }}