Django Rest Framework: Access item detail by slug instead of ID

You should set lookup_field in your serializer:

class ItemSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Item
        fields = ('url', 'slug', 'title', 'item_url')
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

and in your view:

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer
    lookup_field = 'slug'

I got this result:

~ curl http://127.0.0.1:8000/items/testslug/ | python -mjson.tool
{
    "item_url": "https://example.com/", 
    "slug": "testslug", 
    "title": "Test Title", 
    "url": "http://127.0.0.1:8000/items/testslug/"
}

Leave a Comment