Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengendalikan Penyerahan Kunci Asing dengan Cekap dalam Pensiri Bersarang dengan Rangka Kerja Django REST?
Penugasan Kunci Asing dengan Pensiri Bersarang dalam Rangka Kerja Django REST
Django REST Framework (DRF) menyediakan cara yang mudah untuk mengurus perhubungan utama asing dalam data bersiri. Walau bagaimanapun, mendapatkan gelagat yang diingini dalam penyeri bersiri bersarang boleh menjadi mencabar.
Penugasan Kunci Asing dalam Penseri Bersarang
Penyeseri Bersarang mewarisi gelagat penyeri bersiri induknya. Secara lalai, mereka tidak membenarkan penyerahan langsung atau pengubahsuaian kunci asing. Untuk mengatasinya, pendekatan biasa adalah untuk menentukan medan tambahan untuk ID kunci asing. Walau bagaimanapun, ini boleh membawa kepada pembangunan bahagian hadapan yang tidak jelas.
Penyelesaian Alternatif
1. Kaedah Custom to_representation():
Salah satu penyelesaian adalah untuk mengatasi kaedah to_representation() bagi penyeri bersiri induk. Ini membenarkan kemasukan data tersuai dalam respons bersiri.
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
Pendekatan ini memastikan kunci asing diwakili sebagai objek penyeri bersarang, membolehkan penciptaan dan pembacaan menggunakan kekunci yang sama.
2. Medan Alternatif Bidang Berkaitan:
Penyelesaian yang lebih generik ialah mencipta medan penyeri tersuai yang berkelakuan berbeza daripada Bidang Berkaitan PrimaryKeyRelated lalai.
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)
Medan ini membenarkan penetapan penyeri untuk perwakilan kunci asing.
Menggunakan Medan RelatedFieldAlternative
Medan RelatedFieldAlternative kemudiannya boleh digunakan dalam penyeri induk seperti berikut:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
Faedah Menggunakan Medan Tersuai
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Penyerahan Kunci Asing dengan Cekap dalam Pensiri Bersarang dengan Rangka Kerja Django REST?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!