- आप
create(self, validated_data)
किसी भी अतिरिक्त विवरण को सहेजने से पहले ऑब्जेक्ट में किसी भी अतिरिक्त विवरण को जोड़ने का उपयोग करेंगे और प्रत्येक मॉडल फ़ील्ड में "ठेस" मानों को जैसे **validated_data
करते हैं। आदर्श रूप से, आप केवल एक स्थान पर "ठेस" के इस रूप को करना चाहते हैं ताकि create
आपके लिए विधि CommentSerializer
सबसे अच्छी जगह हो। इसके शीर्ष पर, आप अपने खातों को अपने डेटाबेस में सहेजने से ठीक पहले उपयोगकर्ता खाता बनाने के लिए बाह्य एपिस को भी कॉल कर सकते हैं। आपको इस create
फ़ंक्शन का संयोजन के साथ उपयोग करना चाहिए ModelViewSet
। हमेशा सोचें - "पतले विचार, मोटे धारावाहिक"।
उदाहरण:
def create(self, validated_data):
email = validated_data.get("email", None)
validated.pop("email")
return models.YourModel.objects.create(email=email, **validated_data)
इस create(self, request, *args, **kwargs)
फ़ंक्शन को उस वर्ग ModelViewSet
में परिभाषित किया गया है, CreateModelMixin
जिसके माता-पिता हैं ModelViewSet
। CreateModelMixin
मुख्य कार्य ये हैं:
from rest_framework import status
from rest_framework.response import Response
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
जैसा कि आप देख सकते हैं, उपरोक्त create
फ़ंक्शन आपके धारावाहिक पर सत्यापन को कॉल करने और सही प्रतिक्रिया का उत्पादन करने का ख्याल रखता है। इसके पीछे की सुंदरता यह है कि अब आप अपने एप्लिकेशन लॉजिक को अलग कर सकते हैं और अपने आप को सांसारिक और दोहराव वाले सत्यापन कॉल और प्रतिक्रिया आउटपुट से निपटने के बारे में चिंता नहीं कर सकते :)। यह create(self, validated_data)
धारावाहिक (जहां आपके विशिष्ट एप्लिकेशन तर्क निवास कर सकता है) में पाया के साथ संयोजन के रूप में काफी अच्छी तरह से काम करता है ।
- अब आप पूछ सकते हैं, हमारे पास
perform_create(self, serializer)
कोड की सिर्फ एक पंक्ति के साथ एक अलग फ़ंक्शन क्यों है ?!?! खैर, इसके पीछे मुख्य कारण save
फ़ंक्शन को कॉल करते समय कस्टमाइज़बिलिटी की अनुमति है। आप कॉल करने से पहले अतिरिक्त डेटा की आपूर्ति करना पसंद कर सकते हैं save
(जैसेserializer.save(owner=self.request.user)
और अगर हमारे पास नहीं था perform_create(self, serializer)
, तो आपको ओवरराइड करना होगा create(self, request, *args, **kwargs)
और यह सिर्फ भारी और उबाऊ काम करने वाले मिक्सिंस के उद्देश्य को पराजित करता है।
उम्मीद है की यह मदद करेगा!
create(self, validated_data)
धारावाहिक के बारे में , इसका मतलब है कि यह डेटा सत्यापन तर्क पर केंद्रित है? और अधिक से अधिक यह सही जवाब के लिए दिए गए serializer के डेटा को वापस करने में मदद कर सकता है?