Modellserialisierer im Django REST Framework verarbeiten Fremdschlüsselbeziehungen, indem sie die Veröffentlichung von ID-Ganzzahlen ermöglichen für Auftragszwecke. Die Ausweitung dieses Verhaltens auf verschachtelte Serialisierer stellt jedoch eine Herausforderung dar, insbesondere wenn nur vorhandene Datenbankobjekte zugewiesen werden.
In Ermangelung einer sofort einsatzbereiten Unterstützung ist dies möglich Überschreiben Sie to_representation() im übergeordneten Serialisierer, um die verschachtelten untergeordneten Daten einzuschließen:
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
Dieser Ansatz bietet eine einfache und effektive Lösung sowohl für die Erstellung als auch Lesen übergeordneter Instanzen mit verschachtelten untergeordneten Elementen.
Für eine allgemeinere Handhabung kann ein benutzerdefiniertes Serialisierungsfeld verwendet werden:
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
Durch Definition dieses Felds im übergeordneten Element Serializer und die Einstellung des Serializers auf die untergeordnete Serializer-Klasse, die Fremdschlüsselzuweisung kann mit einem einzigen Schlüssel erreicht werden:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
Der Vorteil davon Die generische Methode liegt in ihrer Anwendbarkeit auf mehrere Serialisierer, die dieses Verhalten erfordern, wodurch der Bedarf an benutzerdefinierten Feldern und Methoden für jeden reduziert wird.
Das obige ist der detaillierte Inhalt vonSo weisen Sie verschachtelte Fremdschlüssel im Django REST Framework zu: Ein vereinfachter Ansatz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!