| 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'] |