Первое, что мы видим неправильно, это то, что ученик никак не связан с группой. Итак, давайте соединим учеников с группами
from django.db import models
class Student(models.Model):
name=models.CharField(max_length=200)
surname=models.CharField(max_length=200)
class Group20(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
name=models.CharField(max_length=200)
math=models.DecimalField(decimal_places=2,max_digits=1000)
english=models.DecimalField(decimal_places=2,max_digits=1000)
class Nondemandgroup(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
name=models.CharField(max_length=200)
acting=models.DecimalField(decimal_places=2,max_digits=1000)
cooking=models.DecimalField(decimal_places=2,max_digits=1000)
Теперь давайте перейдем к части, в которой рассчитывается итоговая оценка
Давайте получим всех пользователей из группы group20, которые имеют более 60 по математике Нам также нужны математика и английский sh, чтобы вычислить средний балл вместе с актерским мастерством. Итак, давайте также получим это значение.
group20_objs = Group20.objects.filter(math__gt=60).values_list('student__name', 'math', 'english')
Это даст значение в следующем формате
[("studentA", "math_score_of_A", "english_score_of_A"), ...]
[("Chantel", "100", "100"), ("Chantel1", "90", "85"),..]
Теперь давайте получим студентов, которые в среднем по математике, engli sh и актерскому мастерству выше 70.
final_students = []
for item in group20_objs:
student_name, math_score, english_score = item
# Get acting score for user
# Hoping student will have record here as well
acting_score = Nondemandgroup.objects.filter(student__name=student_name).first(). acting
if (acting_score + math_score + english_score)/3 >= 70:
final_students.append(student_name)