Django REST फ्रेमवर्क में नेस्टेड सीरियलाइज़र के साथ विदेशी कुंजी असाइनमेंट
Django REST फ्रेमवर्क (DRF) विदेशी कुंजी संबंधों को प्रबंधित करने का एक सुविधाजनक तरीका प्रदान करता है क्रमबद्ध डेटा. हालाँकि, नेस्टेड सीरियलाइज़र में वांछित व्यवहार प्राप्त करना चुनौतीपूर्ण हो सकता है।
नेस्टेड सीरियलाइज़र में विदेशी कुंजी असाइनमेंट
नेस्टेड सीरियलाइज़र अपने मूल सीरियलाइज़र के व्यवहार को प्राप्त करते हैं। डिफ़ॉल्ट रूप से, वे विदेशी कुंजियों के सीधे असाइनमेंट या संशोधन की अनुमति नहीं देते हैं। इसे दूर करने के लिए, एक सामान्य दृष्टिकोण विदेशी कुंजी की आईडी के लिए एक अतिरिक्त फ़ील्ड निर्दिष्ट करना है। हालाँकि, इससे अस्पष्ट फ्रंट-एंड विकास हो सकता है।
वैकल्पिक समाधान
1. कस्टम to_repretation() विधि:
एक समाधान पैरेंट सीरिएलाइज़र की to_repretation() विधि को ओवरराइड करना है। यह क्रमबद्ध प्रतिक्रिया में कस्टम डेटा को शामिल करने की अनुमति देता है।
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
यह दृष्टिकोण सुनिश्चित करता है कि विदेशी कुंजी को नेस्टेड सीरियलाइज़र ऑब्जेक्ट के रूप में दर्शाया गया है, जो एक ही कुंजी का उपयोग करके निर्माण और पढ़ने दोनों को सक्षम बनाता है।
2. संबंधित फ़ील्डवैकल्पिक फ़ील्ड:
एक अधिक सामान्य समाधान एक कस्टम सीरियलाइज़र फ़ील्ड बनाना है जो डिफ़ॉल्ट प्राइमरीकीरिलेटेडफ़ील्ड से अलग व्यवहार करता है।
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def to_representation(self, instance): if self.serializer: return self.serializer(instance, context=self.context).data return super().to_representation(instance)
यह फ़ील्ड विदेशी कुंजी के प्रतिनिधित्व के लिए एक क्रमबद्धता निर्दिष्ट करने की अनुमति देता है।
संबंधित फ़ील्ड वैकल्पिक फ़ील्ड का उपयोग करना
संबंधित फ़ील्ड वैकल्पिक फ़ील्ड का उपयोग मूल क्रमांकन में निम्नानुसार किया जा सकता है:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
कस्टम फील्ड का उपयोग करने के लाभ
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3