Увеличение каждого значения таблицы
У нас есть две модели класса: 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)