Я пытаюсь удалить продукт из списка желаний определенного пользователя. Я попытался использовать для этого метод уничтожения ModelViewSet, но, конечно, потерпел неудачу. Дело в том, что мне нужно отправить два параметра моему методу уничтожения, поэтому общее представление не сработает. Есть ли способ решить эту проблему?
Вот что я пытался сделать:
class WishlistViewSet(viewsets.ModelViewSet):
serializer_class = WishlistSerializer
# get_queryset and create methods here
def destroy(self, request, *args, **kwargs):
post_data = request.data
selected_user = User.objects.get(pk=int(post_data['user_id']))
selected_producto = Catalogo.objects.get(pk=int(post_data['producto_id']))
product_in_wishlist = Wishlist.objects.get(id_catalogo_producto=selected_producto, id_cliente=selected_user)
product_in_wishlist.delete()
return Response({'message': 'Producto eliminado de tu lista de deseos'})
Это мой urls.py для этого приложения:
router = DefaultRouter()
router.register('wishlist', WishlistViewSet, basename='wishlist')
urlpatterns = [
path('', include(router.urls)),
]
Решение
Оказывается, подход, который лучше всего сработал для меня, заключается в том, чтобы сначала выполнить запрос на получение, чтобы получить идентификатор строки списка желаний. Затем запрос на удаление с этим идентификатором работал отлично.
Каков результат, который вы получаете с вашим кодом?
"detail": "Метод \"DELETE\" не разрешен." Это связано с тем, что мой тип URL-адреса не поддерживает метод удаления, который является маршрутизатором с зарегистрированными наборами представлений. Но я также не могу найти подход к документации DRF.
Можете ли вы поделиться соответствующим
urls.py
? пожалуйстаГотово мой друг.
Можете ли вы отправить другие запросы на конечную точку, например
GET
?Да. Get и Post работают, а Delete нет из-за типа URL, в данном случае это /store/wishlist/.
DELETE
— это глагол, который работает с URL-адресом, в вашем случае/wishlist/<int:id>/
, как это предусмотрено ViewSet. То, что вы хотите сделать здесь, это просто отправить некоторые данные в конечную точку, что не является правильным использованием методаdestroy
. Возможно, вы используете@action
в наборе представлений, создавая/wishlist/remove/
и передавая ожидаемый запрос, и вы даже можете проверить его с помощью сериализатора в методе.