Python Django Rest框架在数据库中多次更新时出错,错误数据无效。需要一个字典,但得到了一个列表

Python Django Rest框架在数据库中多次更新时出错,错误数据无效。需要一个字典,但得到了一个列表,python,django-rest-framework,Python,Django Rest Framework,我想用我自己的python代码进行多次更新。我得到了我的计算结果,我想用这个结果更新我的数据库。结果是数组中的对象。我如何解决这个问题,请帮助我:' 这是我邮递员的错误 序列化程序.py class StudentSerializer(serializers.ModelSerializer): id = serializers.IntegerField() class Meta: model = Student fields = ['id', 'fullname', 'id_m

我想用我自己的python代码进行多次更新。我得到了我的计算结果,我想用这个结果更新我的数据库。结果是数组中的对象。我如何解决这个问题,请帮助我:'

这是我邮递员的错误

序列化程序.py

class StudentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
class Meta:
    model = Student
    fields = ['id', 'fullname', 'id_minat', 'student_class',
              'score_math', 'score_science', 'score_indonesian', 'cluster']
views.py

class Clusters(generics.RetrieveUpdateAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer

def get_object(self, obj_id):
    try:
        return Student.objects.get(id=obj_id)
    except (Student.DoesNotExist, ValidationError):
        raise status.HTTP_400_BAD_REQUEST

def validate_ids(self, id_list):
    for id in id_list:
        try:
            Student.objects.get(id=id)
        except (Student.DoesNotExist, ValidationError):
            raise status.HTTP_400_BAD_REQUEST
    return True

def put(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    par1 = queryset.values_list('score_math', flat=True)
    par2 = queryset.values_list('score_science', flat=True)
    par3 = queryset.values_list('score_indonesian', flat=True)

    X = np.array(list(zip(par1, par2, par3)))

    def dist(a, b, ax=1):
        return np.linalg.norm(a - b, axis=ax)

    k = 3
    C_x = [76, 62, 62]
    C_y = [69, 77, 69]
    C_z = [64, 64, 73]
    C = np.array(list(zip(C_x, C_y, C_z)), dtype=np.int)

    C_old = np.zeros(C.shape)
    clusters = np.zeros(len(X))
    error = dist(C, C_old, None)
    while error != 0:
        for i in range(len(X)):
            distances = dist(X[i], C)
            cluster = np.argmin(distances)
            clusters[i] = cluster
        C_old = deepcopy(C)
        for i in range(k):
            points = [X[j] for j in range(len(X)) if clusters[j] == i]
            C[i] = np.mean(points, axis=0)
        error = dist(C, C_old, None)

        id_list = request.data['id']
        self.validate_ids(id_list=id_list)
        serializer_class = StudentSerializer
        instances = []
        for i in range(0, len(X)):
            for id in id_list:
                obj = self.get_object(obj_id=id)
            obj.cluster = clusters[i]
            obj.save()
            instances.append(obj)
        serializer = StudentSerializer(data=instances, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=400)
        # return Response(serializer.data)

欢迎来到SO!请将错误消息添加到您的帖子()中。