table
This commit is contained in:
@@ -8,7 +8,7 @@ from django.db.models import JSONField
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
from Main.models import Set
|
||||
from Main.models import Set, SetTask
|
||||
from Main.models.solution_file import SolutionFile
|
||||
from Main.models.task import Task
|
||||
from Sprint.settings import CONSTS
|
||||
@@ -32,6 +32,10 @@ class Solution(models.Model):
|
||||
models.Index(fields=['set', '-time_sent']),
|
||||
]
|
||||
|
||||
@cached_property
|
||||
def settask(self):
|
||||
return SetTask.objects.filter(set=self.set, task=self.task).first()
|
||||
|
||||
@property
|
||||
def percentage_done(self):
|
||||
if self.test is None:
|
||||
|
@@ -29,6 +29,9 @@ class UserInfo(models.Model):
|
||||
verified = models.BooleanField(default=False)
|
||||
teacher = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.surname + ' ' + self.name
|
||||
|
||||
@property
|
||||
def tasks_solved(self):
|
||||
fltr = Task.objects.filter(solution__result=CONSTS["ok_status"], solution__user=self.user).distinct()
|
||||
|
@@ -22,4 +22,14 @@ def settask(set, task):
|
||||
|
||||
@register.filter('startswith')
|
||||
def startswith(s, prefix):
|
||||
return s.startswith(prefix)
|
||||
return s is not None and s.startswith(prefix)
|
||||
|
||||
|
||||
@register.filter('make_pair')
|
||||
def make_pair(user, task):
|
||||
return user, task
|
||||
|
||||
|
||||
@register.filter('get_info')
|
||||
def get_info(data, pair):
|
||||
return data.get(pair)
|
||||
|
@@ -13,10 +13,18 @@ class SolutionsTableView(BaseView):
|
||||
set: Optional[Set] = None
|
||||
task: Optional[Task] = None
|
||||
setTask: Optional[SetTask] = None
|
||||
look: int
|
||||
|
||||
@property
|
||||
def view_file(self):
|
||||
if self.look == 0:
|
||||
return "solutions_table.html"
|
||||
return "solutions_table_1.html"
|
||||
|
||||
def pre_handle(self):
|
||||
if 'page' not in self.request.GET:
|
||||
raise AccessError()
|
||||
self.look = int(self.request.GET['look'] or 0)
|
||||
self.page = int(self.request.GET['page'])
|
||||
if self.setTask is not None:
|
||||
self.set = self.setTask.set
|
||||
@@ -37,6 +45,16 @@ class SolutionsTableView(BaseView):
|
||||
raise AccessError()
|
||||
else:
|
||||
queryset = queryset.filter(user=self.request.user, task=self.task, set=self.set)
|
||||
if self.look == 1:
|
||||
data = dict()
|
||||
users = set()
|
||||
for solution in queryset.order_by('id'): # type: Solution
|
||||
if (solution.user_id, solution.settask) not in data or data[(solution.user_id, solution.settask)] != 'OK':
|
||||
data[(solution.user_id, solution.settask.id)] = solution.result
|
||||
users.add(solution.user)
|
||||
self.context['data'] = data
|
||||
self.context['users'] = sorted(users, key=lambda u: str(u.userinfo))
|
||||
return
|
||||
offset = self.page_size * (self.page - 1)
|
||||
limit = self.page_size
|
||||
self.context["solutions"] = queryset.order_by("-id")[offset:offset + limit]
|
||||
|
Reference in New Issue
Block a user