Удаление объекта из url

Я пытаюсь переопределить действие delete в моем CategoryViewSet, встроенное действие delete принимает id категории DELETE ..category/1/, но я хочу, чтобы оно удаляло по аргументу slug DELETE ..category/movie/. Я не могу понять, как я могу извлечь поле slug из url (*args)

models.py

class Category(models.Model):
    name = models.CharField(
        max_length=255,
        verbose_name='Category Name'
    )

    slug = models.SlugField(
        unique=True,
        verbose_name='Slug Name',
        max_length=50
    )

serializers.py

class CategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
        fields = ('id', 'name', 'slug')

views.py

class CategoryViewSet(viewsets.ModelViewSet):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer

    def destroy(self, request, *args, **kwargs):
        try:
            slug = args[0]
            delete_category = Category.objects.filter(slug=slug)
            self.perform_destroy(delete_category)
        except Http404:
            pass
        return Response(status=status.HTTP_204_NO_CONTENT)

urls.py

router_v1.register(
    r'categories',
    CategoryViewSet
)

urlpatterns = [
    path('', include(router_v1.urls))
]

Вы должны установить не по умолчанию lookup_field. Сделайте это в своих serializers и views.

сериализаторы:

class CategorySerializer(serializers.ModelSerializer):

    class Meta:
        ...
        lookup_field = 'slug'

просмотров:

class CategoryViewSet(viewsets.ModelViewSet):
    ...
    lookup_field = 'slug'
Вернуться на верх