正在从 url 中删除对象

Deleting object from the url

我正在尝试覆盖我的 CategoryViewSet 中的删除操作,内置删除操作采用了类别的 ID DELETE ..category/1/,但我希望它通过 slug 参数 DELETE ..category/movie/ 删除。我不知道如何从 url (*args)

中撤回 slug 字段

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。在你的 serializersviews.

中进行

序列化程序:

class CategorySerializer(serializers.ModelSerializer):

    class Meta:
        ...
        lookup_field = 'slug'

观看次数:

class CategoryViewSet(viewsets.ModelViewSet):
    ...
    lookup_field = 'slug'