Я пытаюсь обновить существующую запись в Django, но всякий раз, когда я отправляю запрос почтальону, я получаю следующее.
![Postman Request](https://i.stack.imgur.com/0iqYw.png)
Там написано что оно уже существует. Поэтому я попытался назначить
task_1 = Task.objects.get(pk=task_id)
task_1 = ser
Но я получаю сообщение об ошибке, что не могу назначить его
================== =============
Мой текущий код:
![models.py and urls.py](https://i.stack.imgur.com/bOyMp.png)
class TaskView(APIView):
permission_classes = (IsAuthenticated,)
def put(self, request, task_id):
task_obj = find_task(request.auth, task_id)
if task_obj:
task = task_obj.data
my_data = json.loads(request.body)
keys = list(my_data.keys())
for key in keys:
task[key] = my_data[key]
ser = TaskSerializer(data=task)
ser.is_valid(raise_exception=True)
ser.save()
return Response(ser.data)
else:
return Response(status=status.HTTP_404_NOT_FOUND)
# Returns the task only if its assigned to current user
def find_task(token, task_id):
u_id = Token.objects.get(key=token).user_id
assign_to = AssignTo.objects.filter(task_id=task_id, user_id=u_id)
if len(assign_to) > 0:
task = Task.objects.get(pk=task_id)
serializer = TaskSerializer(task)
return serializer
else:
return False
Я верю в это не имеет ничего общего с методом, который я использую (POST, PUT, PATCH), потому что он прекрасно работает, когда я закомментирую эту часть кода:
# ser = TaskSerializer(data=task)
# print(ser)
# ser.is_valid(raise_exception=True)
# ser.save()
return Response(task)
Так что это что-то с сериализацией и экземплярами задач
===============================
ВТОРАЯ ВЕРСИЯ МОЕГО КОДА:
def put(self, request, task_id):
u_id = Token.objects.get(key=request.auth).user_id
assign_to = AssignTo.objects.filter(task_id=task_id, user_id=u_id)
if len(assign_to) > 0:
task = Task.objects.get(pk=task_id)
my_data = json.loads(request.body)
keys = list(my_data.keys())
for key in keys:
task[key] = my_data[key]
print(task)
return Response(task)
else:
return Response(status=status.HTTP_404_NOT_FOUND)
Ошибка, которую я получаю из ВТОРОЙ ВЕРСИИ кода: TypeError: 'Task' object does not support item assignment
Так как мне просто обновить данные ключи из тела запроса?