Можно ли использовать объектную пробку (или любое другое поле) для доступа к деталям элемента вместо использования идентификатора?
Например, если у меня есть элемент с slug "lorem" и ID 1. По умолчанию URL-адрес http://localhost:9999/items/1/
. Я хочу получить доступ к нему через http://localhost:9999/items/lorem/
.
Добавление lookup_field
в сериализаторе. Класс Meta не изменил автоматически сгенерированный URL-адрес и не разрешил мне получить доступ к элементу, вручную введя пул вместо идентификатора в URL-адресе.
models.py
class Item(models.Model):
slug = models.CharField(max_length=100, unique=True)
title = models.CharField(max_length=100, blank=True, default='')
# An arbitrary, user provided, URL
item_url = models.URLField(unique=True)
serializers.py
class ClassItemSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Item
fields = ('url', 'slug', 'title', 'item_url')
views.py
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
urls.py
router = DefaultRouter()
router.register(r'items', views.ItemViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
]
Сгенерированный JSON:
[
{
"url": "http://localhost:9999/items/1/",
"slug": "lorem",
"title": "Lorem",
"item_url": "http://example.com"
}
]