У меня 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"),
Я пытаюсь PUT, PATCH, GET, но получаю ту же ошибку
{
"detail": "Not found.",
"status_code": 404
}
1 ответ
Проблема заключается в функции get_queryset
. Она ожидает набор запросов, но ваш возвращает единственный объект, что делает функция get
, как описано в здесь. Итак, вам нужно либо установить поле класса queryset
, либо использовать функцию get_queryset
.
Вам не нужно искать объект задачи самостоятельно, это то, что делает за вас универсальное представление. также вам не нужно указывать обработчики методов (get
, post
, т.е.) самостоятельно, они уже созданы, потому что вы используете класс RetrieveUpdateDestroyAPIView
. Кроме того, поскольку в поле поиска по умолчанию используется первичный ключ (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
. Это почти то же самое, просто сохранив код
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.