تعيين المفاتيح الخارجية مع التسلسلات المتداخلة في Django REST Framework
يوفر Django REST Framework (DRF) طريقة ملائمة لإدارة علاقات المفاتيح الخارجية في بيانات متسلسلة. ومع ذلك، قد يكون الحصول على السلوك المطلوب في المُسلسلات المتداخلة أمرًا صعبًا.
تعيين المفتاح الخارجي في المُسلسلات المتداخلة
ترث المُسلسلات المتداخلة سلوك المُسلسلات الأصلية. افتراضيًا، لا تسمح بالتخصيص المباشر للمفاتيح الخارجية أو تعديلها. للتغلب على هذه المشكلة، تتمثل الطريقة الشائعة في تحديد حقل إضافي لمعرف المفتاح الخارجي. ومع ذلك، يمكن أن يؤدي هذا إلى تطوير واجهة أمامية غامضة.
الحلول البديلة
1. طريقة to_representation () المخصصة:
أحد الحلول هو تجاوز طريقة to_representation () للمتسلسل الأصلي. يسمح هذا بتضمين بيانات مخصصة في الاستجابة المتسلسلة.
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