#django #django-rest-framework
#django #django-rest-framework
Вопрос:
У меня RetrieveUpdateDestroyAPIView
такой вид.
class TaskRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView):
lookup_field = 'id'
serializer_class = TasksSerializer
def get_queryset(self):
query_set=Task.objects.get(id=self.kwargs['id'])
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def patch(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
и мои URL-адреса, подобные этому
path('task_detail/<int:id>', TaskRetrieveUpdateDestroyAPIView.as_view(), name="get_task"),
Я пытаюсь ВСТАВИТЬ, ИСПРАВИТЬ, ПОЛУЧИТЬ, но получаю ту же ошибку
{
"detail": "Not found.",
"status_code": 404
}
Комментарии:
1. Приведите примеры запросов, которые вы делаете
Ответ №1:
Проблема в функции get_queryset
, она ожидает набор запросов, но ваш возвращает один объект, вот что get
делает функция, как описано здесь . Итак, вам нужно либо установить поле queryset
класса, либо использовать get_queryset
функцию.
Вам не нужно самостоятельно искать объект задачи, это то, что общее представление делает для вас. также вам не нужно указывать обработчики методов ( get
, post
, т. Е.) Самостоятельно, они уже сгенерированы, потому что вы используете RetrieveUpdateDestroyAPIView
class . Кроме того, поскольку в поле поиска по умолчанию используется первичный ключ (id), это тоже можно опустить
Попробуйте этот код
class TaskRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView):
queryset = Task.objects.all()
serializer_class = TasksSerializer
и использовать pk
вместо id
path('task_detail/<int:pk>', TaskRetrieveUpdateDestroyAPIView.as_view(), name="get_task")
или вы можете оставить поле поиска как id
и использовать его в path
функции. Это почти то же самое, просто сохранение некоторого кода