Я хочу использовать slug в качестве моего ПК, используя lookup_field . У меня ошибка: «Не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления« service-detail ».
. Я подумал, что если я использую универсальное представление (ListAPIView или RetrieveAPIView), оно 'Я буду знать, есть ли способ сделать это с помощью Viewsets . Что означает, как это сделать, в URL-адресах я могу настроить простой маршрут, например путь ('services / slug /'). Я настроил URL (Маршрутизатор по умолчанию вместо простого маршрутизатора) , чтобы справиться с этим?
serializers.py
class ServiceSerializer(serializers.HyperlinkedModelSerializer):
title = serializers.CharField(required=True)
slug = serializers.SerializerMethodField(read_only=True)
description = serializers.CharField(required=False)
price = serializers.IntegerField(required=True)
service_image = ServiceImageSerializer(many=True)
class Meta:
model = Service
fields = ('url', 'slug', 'title', 'description', 'price', 'service_image')
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field':'slug'}
}
def get_slug(self, instance):
return slugify(instance.vendor.username + "-" + instance.title)
views.py
class ServiceViewSet(viewsets.ModelViewSet):
queryset = Service.objects.all()
serializer_class = ServiceSerializer
lookup_field = 'slug'
urls.py
router = routers.DefaultRouter()
router.register('categories', CategoryViewSet)
router.register('services', ServiceViewSet)
router.register('images', ServiceImageViewSet)
urlpatterns = [
path('', include(router.urls)),
]