Удаление объекта из 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'