البرمجة

تعديل حقل الـ author في Django REST Framework Serializer

لتحقيق هذا، يمكنك تعديل حقل الـ author في الـ BookSerializer استنادًا إلى نوع الطلب (GET أو POST أو PUT أو PATCH). يمكنك القيام بذلك من خلال تعديل ميثود to_representation في الـ BookSerializer ليتناسب مع نوع الطلب الحالي.

إليك كيف يمكن تحقيق ذلك:

python
from rest_framework import serializers class BookSerializer(serializers.ModelSerializer): author = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all()) class Meta: model = models.Book fields = ('id', 'title', 'author') def to_representation(self, instance): if self.context['request'].method in ['GET', 'HEAD']: self.fields['author'] = AuthorSerializer(read_only=True) else: self.fields['author'] = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all()) return super().to_representation(instance)

في هذا المثال، يتم فحص نوع الطلب الحالي باستخدام self.context['request'].method، وعلى أساس ذلك يتم تحديد نوع الـ author field في الـ BookSerializer.

تحذير: قد يؤدي استخدام هذه الطريقة إلى بعض المشاكل، حيث يمكن أن يتسبب في تأثيرات غير متوقعة خاصة فيما يتعلق بالأداء والذاكرة. من المهم متابعة تأثير هذا التغيير على أداء التطبيق الخاص بك وضمان عدم وجود أي مشاكل.

المزيد من المعلومات

يمكنك أيضًا استخدام السمة write_only في حقل الـ author في الـ BookSerializer لجعله يتم تجاهل قيمته عند عمليات القراءة (GET و HEAD)، وذلك لتجنب إرجاع بيانات المؤلف كاملة عند استرجاع كتب معينة. يمكن فعل ذلك بتعديل الـ BookSerializer كما يلي:

python
from rest_framework import serializers class BookSerializer(serializers.ModelSerializer): author = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all(), write_only=True) class Meta: model = models.Book fields = ('id', 'title', 'author') def to_representation(self, instance): if self.context['request'].method in ['GET', 'HEAD']: self.fields['author'] = AuthorSerializer(read_only=True) else: self.fields['author'] = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all(), write_only=True) return super().to_representation(instance)

هذا التغيير سيجعل حقل الـ author يظهر كـ read_only أثناء العمليات التي تستدعي قراءة البيانات (GET و HEAD)، وسيتم تجاهل قيمته خلال هذه العمليات.

زر الذهاب إلى الأعلى