From 066dd333a8b975645356817b134f7f2e53bd84a8 Mon Sep 17 00:00:00 2001 From: raiots Date: Tue, 4 Jan 2022 22:56:49 +0800 Subject: [PATCH] add: pager for tasklist view to change year fix: query bug which cause repeated results in tasklist --- apps/tasks/templatetags/taskfilter.py | 35 ++++++++++++++++++++++----- apps/tasks/views.py | 9 ++++--- templates/tasks/tasklist.html | 17 +++++++++---- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/apps/tasks/templatetags/taskfilter.py b/apps/tasks/templatetags/taskfilter.py index 7a68ff3..bdf0457 100644 --- a/apps/tasks/templatetags/taskfilter.py +++ b/apps/tasks/templatetags/taskfilter.py @@ -7,18 +7,18 @@ register = template.Library() @register.filter(name='quarter_cate') -def quarter_cate(value, quarter): +def quarter_cate(value, year_quarter): year_now = datetime.now().strftime('%Y') month = value.deadline.strftime('%m') year = value.deadline.strftime('%Y') month = int(month) # year = int(year) # year_now = int(year) 不知道为什么,如果转整数会把2021和2022认为相同 - quarter = int(quarter) + # print(quarter) + req_year = str(year_quarter[1]) + quarter = int(year_quarter[0]) # 可能造成性能损失,每次数据库会调出符合“当年”的任务或工作包的全部任务下工作包,并逐个判断 - - if year == year_now: - print("jakfjklajfklsdjf") + if year == req_year: if quarter == 1 and 1 <= month <= 3: return str(value) + ' ' @@ -36,6 +36,7 @@ def quarter_cate(value, quarter): else: return '' + @register.filter(name='last_month') def last_month(value): curent_date = datetime.strptime(value, '%Y年%m月') @@ -43,6 +44,7 @@ def last_month(value): last_month = last_date.strftime('%Y/%m') return last_month + @register.filter(name='next_month') def next_month(value): curent_date = datetime.strptime(value, '%Y年%m月') @@ -50,7 +52,28 @@ def next_month(value): next_month = next_date.strftime('%Y/%m') return next_month + @register.filter(name='this_month') def this_month(value): curent_date = datetime.strptime(value, '%Y年%m月') - return curent_date.strftime('%m') \ No newline at end of file + return curent_date.strftime('%m') + + +@register.filter(name='last_year') +def last_year(value): + curent_year = value[1] + last_year = curent_year - 1 + return last_year + + +@register.filter(name='next_year') +def next_year(value): + curent_year = value[1] + next_year = curent_year + 1 + return next_year + + +@register.filter(name='this_year') +def this_year(value): + curent_year = value[1] + return curent_year \ No newline at end of file diff --git a/apps/tasks/views.py b/apps/tasks/views.py index 35b02b9..76d69bd 100644 --- a/apps/tasks/views.py +++ b/apps/tasks/views.py @@ -379,11 +379,14 @@ class GroupTodoList(View): class TaskListView(View): @method_decorator(login_required) def get(self, request, year=timezone.now().year): # TODO 把timezone.now().year写在后面要用year替换的地方是否可以解决 - tasks = Task.objects.filter(department=request.user.department, deadline__year=year).order_by('task_id') \ - | Task.objects.filter(department=request.user.department, related_task__deadline__year=year).order_by('task_id') + tasks = Task.objects.filter(department=request.user.department, deadline__year=year).order_by('task_id')\ + | Task.objects.filter(department=request.user.department, related_task__deadline__year=year).order_by('task_id') + tasks = tasks.distinct() + # tasks = Task.objects.filter(Q(department=request.user.department), Q(deadline__year=year) | Q(related_task__deadline__year=year)).order_by('task_id') # 使用‘或’,找出工作包/年度任务的截止日期在今年的年度任务。后面还要做一个筛选,以达到只显示本年度的工作包 + year_quarter = {'1': [1, year], '2': [2, year], '3': [3, year], '4': [4, year]} - context = {'tasks': tasks} + context = {'tasks': tasks, 'year_quarter': year_quarter} return render(request, 'tasks/tasklist.html', context) diff --git a/templates/tasks/tasklist.html b/templates/tasks/tasklist.html index dc9bdd8..ac2a769 100644 --- a/templates/tasks/tasklist.html +++ b/templates/tasks/tasklist.html @@ -35,8 +35,15 @@
- + +
@@ -86,16 +93,16 @@ {% load taskfilter %}
{{ task.aim_value }} - + - + - + - + {{ task.deadline | date:"Y.m" }} {{ task.duty_group }}