Django REST Framework 中的嵌套序列化器的外鍵分配
Django REST Framework (DRF) 提供了一個管理外鍵關係的便捷方法序列化資料。然而,在嵌套序列化器中獲得所需的行為可能具有挑戰性。
嵌套序列化器中的外鍵分配
嵌套序列化器繼承其父序列化器的行為。預設情況下,它們不允許直接分配或修改外鍵。為了克服這個問題,常見的方法是為外鍵 ID 指定一個附加欄位。然而,這可能會導致前端開發不明確。
替代解決方案
1.自訂to_representation() 方法:
一個解決方案是重寫父序列化器的to_representation() 方法。這允許在序列化響應中包含自訂資料。
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
此方法可確保外鍵表示為嵌套序列化器對象,從而可以使用相同的鍵進行建立和讀取。
2。 relatedFieldAlternative 欄位:
更通用的解決方案是建立一個行為與預設 PrimaryKeyRelatedField 不同的自訂序列化器欄位。
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)
此欄位允許為外鍵的表示指定序列化器。
使用相關欄位替代欄位
RelatedFieldAlternative 欄位可以在父序列化器中使用,如下所示:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
使用自訂欄位的好處
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3