shcool / grades /models.py
CORVO-AI's picture
Upload 111 files
b7f55e1 verified
Raw
History Blame Contribute Delete
1.37 kB
from django.db import models
from students.models import Student
from teachers.models import Subject
class Grade(models.Model):
TERM_CHOICES = [('1', 'Term 1'), ('2', 'Term 2'), ('3', 'Term 3'), ('final', 'Final')]
student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='grades')
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, related_name='grades')
term = models.CharField(max_length=10, choices=TERM_CHOICES, default='1')
score = models.DecimalField(max_digits=5, decimal_places=2)
max_score = models.DecimalField(max_digits=5, decimal_places=2, default=100)
academic_year = models.CharField(max_length=20, default='2024-2025')
remarks = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
@property
def percentage(self):
if self.max_score > 0:
return round((self.score / self.max_score) * 100, 1)
return 0
@property
def letter_grade(self):
p = self.percentage
if p >= 90: return 'A+'
if p >= 80: return 'A'
if p >= 70: return 'B'
if p >= 60: return 'C'
if p >= 50: return 'D'
return 'F'
def __str__(self):
return f"{self.student} - {self.subject} - {self.term}"
class Meta:
ordering = ['-created_at']