Операция обновления в модели удаляет всех пользователей, хранящихся в поле "многие ко многим" в этой модели - Django
В моем приложении ученик может послать учителю запрос на следование, который принимается учителем, и ученик добавляется в список последователей учителя. Я храню учеников как последователей учителя с помощью модели отношений "многие ко многим". Ниже приведен код:
home_tuition_students = models.ManyToManyField(CustomUser, blank=True, related_name='home_tuition_students')
general_tuition_students = models.ManyToManyField(CustomUser, blank=True, related_name='general_tuition_students')
Вышеуказанные поля находятся внутри модели, которая на самом деле является моделью профиля учителя, где хранится другая информация об учителях, такая как имя, номер телефона и т.д. Теперь я столкнулся со странной проблемой: всякий раз, когда учитель выполняет операцию обновления, например, меняет номер телефона или любую другую информацию, все ученики, хранящиеся в поле many to many, удаляются после обновления. Обновление api выглядит следующим образом:
api_view(['PUT'])
@permission_classes([IsAuthenticated])
@parser_classes([MultiPartParser, FormParser])
def edit_teacher_detail(request):
data = request.data
if data is not None:
queryset = TeacherDetail.objects.get(user = request.user)
serializer = TeacherDetailSerializer(instance=queryset, data = data)
try:
if serializer.is_valid():
serializer.save()
return Response({'message':"details edited"} ,status=status.HTTP_200_OK)
else:
print(serializer._errors)
return Response({'message': serializer._errors}, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
print(e)
return Response({"message": str(e)},status=status.HTTP_500_INTERNAL_SERVER_ERROR)
else:
return Response({'message':'no query recieved'}, status=status.HTTP_400_BAD_REQUEST)
Я не знаю, как и почему это происходит. Пожалуйста, предложите мне решение для этого.
Хорошо, я просто играл с кодом, чтобы понять, что происходит не так, и обнаружил, что проблема была вызвана используемым сериализатором. Сериализатор, который использовался, сериализовал все поля, включая поле many to many. Я понял, что сериализатор должен содержать только те поля, которые могут быть обновлены пользователем, иначе он сбросит поле, для которого не было получено данных.
Я не знал, что это нужно сделать для использования сериализаторов при выполнении операции обновления.