इस मामले पर विचार करें जहां मेरे पास Book
और Author
मॉडल है।अनुरोध प्रकार के आधार पर एक Django REST Framework ModelSerializer में एक फ़ील्ड बदलें?
serializers.py
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.Author
fields = ('id', 'name')
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = models.Book
fields = ('id', 'title', 'author')
viewsets.py
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
यह अच्छा काम करता है अगर मैं एक पुस्तक के लिए एक GET
अनुरोध भेजें। मुझे एक नेस्टेड धारावाहिक के साथ एक आउटपुट मिलता है जिसमें पुस्तक विवरण और घोंसला वाले लेखक विवरण होते हैं, जो मैं चाहता हूं।
हालांकि, जब मैं बनाने के लिए/एक पुस्तक अद्यतन चाहते हैं, मैं एक POST
/PUT
/सिर्फ अपने आईडी के बजाय लेखक की नेस्टेड विवरण के साथ PATCH
भेज दिया। मैं लेखक आईडी निर्दिष्ट करके पुस्तक ऑब्जेक्ट को बनाने/अपडेट करने में सक्षम होना चाहता हूं, न कि संपूर्ण लेखक ऑब्जेक्ट।
तो, कुछ जहाँ मेरे serializer एक GET
अनुरोध
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = models.Book
fields = ('id', 'title', 'author')
के लिए इस तरह दिखता है और मेरी serializer एक POST
, PUT
, PATCH
अनुरोध
class BookSerializer(serializers.ModelSerializer):
author = PrimaryKeyRelatedField(queryset=Author.objects.all())
class Meta:
model = models.Book
fields = ('id', 'title', 'author')
मैं भी नहीं चाहते हैं के लिए इस तरह दिखता है प्रत्येक प्रकार के अनुरोध के लिए दो पूरी तरह से अलग धारावाहिक बनाने के लिए। मैं फ़ील्ड को BookSerializer
में बस संशोधित करना चाहता हूं।
आखिरकार, क्या यह पूरी बात करने का एक बेहतर तरीका है?
http://www.django-rest-framework.org/api-guide/routers/ पर देखें - अपनी आवश्यकताओं के साथ पत्राचार में सजावटी जोड़ें। – dmitryro
@dmitryro मुझे समझ में नहीं आता है। क्या आप आगे बता सकते हैं? सजावटकर्ताओं को धारावाहिकों के लिए क्षेत्रों को कैसे संशोधित किया जाएगा? –
आपको एक कस्टम राउटर बनाना होगा जो विभिन्न अनुरोध विधियों को प्रबंधित करेगा - पोस्ट, प्राप्त करें, पुट करें, और अपनी विधियों को सजाने के लिए जो अनुरोध विधि आप उपयोग करना चाहते हैं - दस्तावेज़ीकरण कुछ नमूने प्रदान करता है। यह भी देखें http://stackoverflow.com/questions/28957912/overriding-django-rest-viewset-with-custom-post-method-and-model – dmitryro