From a9709765724171a794a320a8dda368fcdce7ec3e Mon Sep 17 00:00:00 2001 From: rlacko <rlacko@sch.bme.hu> Date: Sat, 1 Feb 2020 18:32:13 +0100 Subject: [PATCH] added bits --- src/account/models.py | 12 ++++++++---- src/account/serializers.py | 10 +++++++--- src/document/models.py | 9 ++++++++- src/homework/models.py | 5 +++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/account/models.py b/src/account/models.py index 111ebc3..83292a7 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -1,7 +1,8 @@ from django.db import models from django.contrib.auth.models import User from solo.models import SingletonModel - +from django.db.models import Sum +from django.db.models.functions import Coalesce class GroupChoice(models.Model): TEAMS = ( @@ -47,9 +48,12 @@ class Profile(models.Model): role = models.CharField(max_length=10, choices=ROLES, default='Applicant') @property - def score(self): - return self.events_visitor.all().count() * 10 + \ - self.solution.filter(accepted=True).count() * 50 + def events_visited(self): + return self.events_visitor.all().count() + + @property + def homework_bits(self): + return self.solution.filter(accepted=True).values('task__bits').aggregate(total_bits=Sum('task__bits')).get('total_bits') @property def full_name(self): diff --git a/src/account/serializers.py b/src/account/serializers.py index ad8ff93..e0e9354 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -8,7 +8,6 @@ class ChoiceSerializer(serializers.ModelSerializer): class Meta: model = models.GroupChoice fields = ('choice', 'profile') - class ProfileSerializer_User(serializers.ModelSerializer): groups = serializers.SlugRelatedField( @@ -17,6 +16,7 @@ class ProfileSerializer_User(serializers.ModelSerializer): queryset=models.GroupChoice.objects.all()) updated_at = serializers.DateTimeField(read_only=True) full_name = serializers.SerializerMethodField() + bits = serializers.SerializerMethodField() class Meta: model = models.Profile @@ -33,7 +33,7 @@ class ProfileSerializer_User(serializers.ModelSerializer): 'motivation_exercise', 'full_name', 'role', - 'score', + 'bits' ) def validate_updated_at(self, value): @@ -66,6 +66,9 @@ class ProfileSerializer_User(serializers.ModelSerializer): def get_full_name(self, obj): return obj.full_name + + def get_bits(self, obj): + return obj.homework_bits + obj.events_visited class ProfileSerializer_Staff(serializers.ModelSerializer): @@ -91,7 +94,8 @@ class ProfileSerializer_Staff(serializers.ModelSerializer): 'motivation_exercise', 'full_name', 'role', - 'score', + 'events_visited', + 'homework_bits' ) def validate_updated_at(self, value): diff --git a/src/document/models.py b/src/document/models.py index 8e26ea2..efa6d39 100644 --- a/src/document/models.py +++ b/src/document/models.py @@ -7,6 +7,8 @@ from account.models import Profile from homework.models import Solution from common.validators import FileSizeValidator +from common.middleware import CurrentUserMiddleware + def document_file_name(instance, filename): return '/'.join([ @@ -18,7 +20,12 @@ def document_file_name(instance, filename): class Document(models.Model): - uploaded_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING) + uploaded_by = models.ForeignKey( + Profile, + on_delete=models.DO_NOTHING, + related_name='documents', + default=CurrentUserMiddleware.get_current_user_profile, + ) uploaded_at = models.DateTimeField(auto_now_add=True, editable=False) name = models.CharField(max_length=150, blank=True, default='') description = models.TextField(blank=True, default='') diff --git a/src/homework/models.py b/src/homework/models.py index 4ecb6e9..6bc36ce 100755 --- a/src/homework/models.py +++ b/src/homework/models.py @@ -15,6 +15,7 @@ class Task(models.Model): title = models.CharField(max_length=150) text = models.TextField() deadline = models.DateTimeField() + bits = models.IntegerField(default=1) def __str__(self): return self.title @@ -34,5 +35,9 @@ class Solution(models.Model): accepted = models.BooleanField(blank=True, default=False) corrected = models.BooleanField(blank=True, default=False) + @property + def my_bits(self): + return 10 + def __str__(self): return "[{}] {}".format(self.created_at, self.created_by.full_name) -- GitLab