【问题标题】:Increment each of the value of the table增加表的每个值
【发布时间】:2023-02-03 15:52:16
【问题描述】:

我们有两个模型类:学生讲师. 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。这意味着,我们必须为相应的教师 ID 更新学生表的每一行。
例如:
有 3 名学生 - 学生 1:(姓名:“A”,成绩单:3,分数:10);
学生 2:(姓名:“B”,成绩单:4,分数:15);
学生 3:(姓名:“B”,成绩单:4,分数:13);
手术后:
按分数对学生进行排名:
学生 2(排名 1)、学生 3(排名 2)、学生 1(排名 3)。

Student-2(Rank-1)的分数将增加如下( 1 * 2 ),
Student-3(Rank-2)的分数将增加如下( 2 * 2 ),
Student-3(Rank-3)的分数增加如下( 3 * 2 )

我曾尝试做类似以下的事情 -

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

这样只需将 2 添加到每个学生。但是我们想用上面提到的公式 - student's ranking * 2 来增加分数。你能帮我在 django 中实现这个吗?

【问题讨论】:

    标签: python django django-models django-rest-framework django-queryset


    【解决方案1】:

    尝试这个:

    all_students=Student.objects.filter(instructor=instructor_ID).order_by('order')
    
    for i, val in enumerate(all_students): 
        val.mark = (i+1)*2)
        val.save()
    

    输出将是:

    Student 1(...other fields, mark=2)
    
    Student 2(... Other fields, mark=4)
    
    Student 3(... Other fields, mark=6)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2019-05-16
      • 2019-10-21
      • 1970-01-01
      相关资源
      最近更新 更多