Python Django Rest框架在数据库中多次更新时出错,错误数据无效。需要一个字典,但得到了一个列表
我想用我自己的python代码进行多次更新。我得到了我的计算结果,我想用这个结果更新我的数据库。结果是数组中的对象。我如何解决这个问题,请帮助我:' 这是我邮递员的错误 序列化程序.pyPython 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
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!请将错误消息添加到您的帖子()中。