Увеличение каждого значения таблицы

У нас есть две модели класса: Student и Instructor. Студент и Преподаватель имеют отношения один ко многим.

Модели:

class Student(models.Model):
    instructor = models.ForeignKey(Board, on_delete=models.CASCADE, related_name="students")
    name = models.CharField(max_length=255)
    roll = models.IntegerField()
    mark =  models.DecimalField(decimal_places=8, max_digits=16, default= 0.0)

class Instructor(models.Model):
    name = models.CharField(max_length=255)

Сериализаторы:

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('id', 'name', 'roll', 'mark')
        model = Student

class InstructorSerializer(serializers.ModelSerializer):
    students = StudentSerializer(many=True, read_only=True)
    class Meta:
        fields = ('id', 'name', 'students')
        model = Instructor

У нас есть гипотетический сценарий, в котором преподаватель хочет повысить оценки каждого студента с помощью сумасшедшей формулы: student's ranking * 2 . Это означает, что мы должны обновить каждую строку таблицы студентов для соответствующего идентификатора преподавателя
. Например:
есть 3 студента - Студент 1: ( имя: "A", бросок: 3, оценка: 10) ;
Студент 2: ( имя: "B", бросок: 4, отметка: 15) ;
Студент 3: ( имя: "B", бросок: 4, отметка: 13) ;
после операции:
Ранжирование студентов по отметкам :
Студент 2 (ранг 1), студент 3 (ранг 2), студент 1 (ранг 3).

Оценка студента-2 (ранг-1) будет увеличена следующим образом ( 1 * 2 ),
Оценка студента-3 (ранг-2) будет увеличена следующим образом ( 2 * 2 ),
Оценка студента-3 (ранг-3) будет увеличена следующим образом ( 3 * 2 )

Я пытался сделать что-то вроде следующего -

Student.objects.filter(instructor=instructor_ID).order_by('order').update(mark = F('mark') + 2 )

Таким образом, просто добавьте 2 к каждому из учеников. Но мы хотели увеличить оценки с помощью вышеупомянутой формулы, то есть - student's ranking * 2. Не могли бы вы помочь мне реализовать это в django?

Попробуйте это:

all_students=Student.objects.filter(instructor=instructor_ID).order_by('order')

for i, val in enumerate(all_students): 
    val.update(mark = (i+1)*2)  

Выход будет:

Student 1(...other fields, mark=2)

Student 2(... Other fields, mark=4)

Student 3(... Other fields, mark=6)
Вернуться на верх