Django REST Framework 中的模型序列化程式透過允許發布ID 整數來處理外鍵關係出於分配目的。然而,將此行為擴展到巢狀序列化器會帶來挑戰,尤其是在僅指派現有資料庫物件時。
在缺乏開箱即用的支援的情況下,可以重寫父序列化器中的to_representation() 以包含巢狀的子數據:
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
這種方法提供了一個簡單有效的解決方案用於建立和讀取具有巢狀子層級的父實例。
對於更通用的處理,可以使用自訂序列化器欄位:
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
透過定義此父序列化器中的欄位並將序列化器設定為子序列化器類,可以使用單一來實現外鍵分配key:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
這種通用方法的優點在於它適用於需要這種行為的多個序列化器,減少了每個序列化器對自定義欄位和方法的需求。
以上是如何在 Django REST Framework 中指派嵌套外鍵:一種簡化方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!