Penyesir model dalam Rangka Kerja REST Django mengendalikan hubungan kunci asing dengan membenarkan integer ID disiarkan untuk tujuan tugasan. Walau bagaimanapun, memanjangkan tingkah laku ini kepada penyeri bersiri bersarang menimbulkan cabaran, terutamanya apabila hanya menetapkan objek pangkalan data sedia ada.
Jika tiada sokongan di luar kotak, seseorang boleh override to_representation() dalam penyeri induk untuk memasukkan data anak bersarang:
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
Pendekatan ini menyediakan cara yang mudah dan penyelesaian yang berkesan untuk mencipta dan membaca contoh ibu bapa dengan anak bersarang.
Untuk pengendalian yang lebih umum, medan penyeri tersuai boleh digunakan:
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
Oleh mentakrifkan medan ini dalam penyeri induk dan penetapan penyeri kepada kelas penyeri anak, penetapan kunci asing boleh dicapai menggunakan satu kunci:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
Kelebihan kaedah generik ini terletak pada kebolehgunaannya pada berbilang penyeri yang memerlukan kelakuan ini, mengurangkan keperluan untuk medan dan kaedah tersuai untuk setiap satu.
Atas ialah kandungan terperinci Cara Menetapkan Kunci Asing Bersarang dalam Rangka Kerja Django REST: Pendekatan Ringkas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!