add: pager for tasklist view to change year

fix: query bug which cause repeated results in tasklist
This commit is contained in:
raiots 2022-01-04 22:56:49 +08:00
parent 69af43c01c
commit 066dd333a8
3 changed files with 47 additions and 14 deletions

View File

@ -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) + '&#13;&#10;'
@ -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')
@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

View File

@ -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)

View File

@ -35,8 +35,15 @@
<table class="table table-striped" style="word-break: break-all; overflow: auto" cellspacing="0">
<div class="row">
<div class="col-12" style="background-color: #f2f2f2">
<button type="button" id="unfold" onclick="alert1()" class="btn btn-default float-right"><i class="far fa-credit-card"></i> 展开
<button type="button" id="unfold" onclick="alert1()" class="btn btn-default float-left"><i class="far fa-credit-card"></i> 展开
</button>
<ul class="pagination float-md-right">
{% load taskfilter %}
<li class="page-item"><a class="page-link" href="/tasklist/{{ year_quarter.1|last_year }}">«</a></li>
<li class="page-item"><a class="page-link"> {{ year_quarter.1|this_year }}年 </a></li>
<li class="page-item"><a class="page-link" href="/tasklist/{{ year_quarter.1|next_year }}">»</a></li>
</ul>
</div>
</div>
<thead>
@ -86,16 +93,16 @@
<td>{{ task.aim_value }}</td>
{% load taskfilter %}
<td style="background-color: #BFE7A8; padding: 0">
<textarea class="text-none-border" style="background-color: #BFE7A8;">{% for todo in task.related_task.all %}{{ todo|quarter_cate:'1'|safe }}{% endfor %}</textarea>
<textarea class="text-none-border" style="background-color: #BFE7A8;">{% for todo in task.related_task.all %}{{ todo|quarter_cate:year_quarter.1|safe }}{% endfor %}</textarea>
</td>
<td style="background-color: #F5CCB0; padding: 0">
<textarea class="text-none-border" style="background-color: #F5CCB0">{% for todo in task.related_task.all %}{{ todo|quarter_cate:'2'|safe }}{% endfor %}</textarea>
<textarea class="text-none-border" style="background-color: #F5CCB0">{% for todo in task.related_task.all %}{{ todo|quarter_cate:year_quarter.2|safe }}{% endfor %}</textarea>
</td>
<td style="background-color: #F7E4A8; padding: 0">
<textarea class="text-none-border" style="background-color: #F7E4A8">{% for todo in task.related_task.all %}{{ todo|quarter_cate:'3'|safe }}{% endfor %}</textarea>
<textarea class="text-none-border" style="background-color: #F7E4A8">{% for todo in task.related_task.all %}{{ todo|quarter_cate:year_quarter.3|safe }}{% endfor %}</textarea>
</td>
<td style="background-color: #83E1E3; padding: 0">
<textarea class="text-none-border" style="background-color: #83E1E3">{% for todo in task.related_task.all %}{{ todo|quarter_cate:'4'|safe }}{% endfor %}</textarea>
<textarea class="text-none-border" style="background-color: #83E1E3">{% for todo in task.related_task.all %}{{ todo|quarter_cate:year_quarter.4|safe }}{% endfor %}</textarea>
</td>
<td style="text-align:center;">{{ task.deadline | date:"Y.m" }}</td>
<td style="text-align:center;">{{ task.duty_group }}</td>