"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > Django REST फ्रेमवर्क के साथ नेस्टेड सीरियलाइज़र में विदेशी कुंजी असाइनमेंट को कुशलतापूर्वक कैसे संभालें?

Django REST फ्रेमवर्क के साथ नेस्टेड सीरियलाइज़र में विदेशी कुंजी असाइनमेंट को कुशलतापूर्वक कैसे संभालें?

2024-11-16 को प्रकाशित
ब्राउज़ करें:302

How to Efficiently Handle Foreign Key Assignment in Nested Serializers with Django REST Framework?

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