के बजाय स्लग द्वारा आइटम का विवरण एक्सेस करें क्या आईडी का उपयोग करने के बजाय किसी आइटम के विवरण तक पहुंचने के लिए किसी ऑब्जेक्ट के स्लग (या किसी अन्य फ़ील्ड) का उपयोग करना संभव है?Django Rest Framework: ID
उदाहरण के लिए, यदि मेरे पास स्लग "लोरेम" और आईडी 1 वाला कोई आइटम है। डिफ़ॉल्ट रूप से URL http://localhost:9999/items/1/
है। मैं इसके बजाय http://localhost:9999/items/lorem/
के माध्यम से इसे एक्सेस करना चाहता हूं।
सीरियलाइज़र के मेटा क्लास में lookup_field
जोड़ना स्वचालित रूप से जेनरेट किए गए यूआरएल को बदलने के लिए कुछ भी नहीं करता और न ही यह मुझे यूआरएल में आईडी के बजाय स्लग लिखकर आइटम तक पहुंचने की इजाजत देता है।
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"
}
]
एक पूरा जवाब के लिए समय नहीं है, लेकिन आप के लिए [डीआरएफ के लिए रूटर डॉक्स पेज] पर (http से ढूंढ सकता है: //www.django-rest-framework .org/api-गाइड/रूटर/# simplerouter)। विशेष रूप से, 'SimpleRouter' के लिए लिंक किए गए अनुभाग के नीचे,' क्लास MyModelViewSet' के साथ उदाहरण देखें। मुझे लगता है कि आप लुकअप वैल्यू को जो कुछ भी चाहते हैं उसे बदल सकते हैं। एक अच्छा प्रारंभिक बिंदु हो सकता है। – eykanal
ध्यान दें कि आप 'DefaultRouter' का उपयोग कर रहे हैं, न कि 'SimpleRouter' ... यह सुनिश्चित नहीं है कि यह कार्यक्षमता दोनों वर्गों में कौन सा है। – eykanal