Ich habe natürlich die Dokumente überprüft, aber ich habe mich gefragt, ob jemand den Unterschied im Anwendungsfall und in der Anwendung zwischen diesen Bereichen besser erklären könnte. Warum sollte man ein Feld gegenüber dem anderen benutzen? Gäbe es einen Unterschied zwischen diesen Feldern für eine OneToOne-Beziehung?
Sie würden eine HyperlinkedIdentityField
verwenden, um eine Verknüpfung zu dem Objekt herzustellen, das gerade serialisiert wird und eine HyperlinkedRelatedField
, um eine Verknüpfung zu Objekten zu erstellen, die serialisiert sind . p>
Bei einer Eins-zu-Eins-Beziehung, einer Fremdschlüsselbeziehung, einer Viele-zu-Viele-Beziehung und grundsätzlich allem, was Beziehungen betrifft (in Django-Modellen), möchten Sie HyperlinkedRelatedField
verwenden. Die einzige Zeit, in der HyperlinkedRelatedField
verwendet wird, ist das Feld url
, das Sie in Ihren Serializer aufnehmen können, um auf das aktuelle Objekt zu zeigen.
In Django REST Framework 3.0.0 gibt es nur zwei Unterschiede zwischen a HyperlinkedRelatedField
und HyperlinkedIdentityField
.
source
wird automatisch auf *
(das aktuelle Objekt) read_only=True
eingestellt, daher kann es nicht geändert werden Das bedeutet, dass das Festlegen von HyperlinkedRelatedField
mit diesen Eigenschaften genau gleich ist wie mit einem HyperlinkedIdentityField
.
In älteren Versionen des Django-REST-Frameworks (vor 3.0.0) war HyperlinkedIdentityField
ein dediziertes Feld zum Auflösen der URL für das aktuelle Objekt. Es wurde ein leicht anderer Parametersatz akzeptiert und war keine Unterklasse von HyperlinkedRelatedField
.
Die offensichtliche Antwort ist, dass HyperLinkedIdentityField
nur auf das aktuelle Objekt zeigen soll, während HyperLinkedRelatedField
auf etwas verweisen soll, auf das das aktuelle Objekt verweist. Ich vermute unter der Haube, dass die beiden sich nur darin unterscheiden, dass das Identitätsfeld weniger Arbeit zu tun hat, um die URL-Routen des verwandten Modells zu finden (weil das verwandte Modell das aktuelle Modell ist), während das verwandte Feld tatsächlich herausfinden muss richtige URLs für ein anderes Modell.
Mit anderen Worten, HyperLinkedIdentityField
ist leichter (effizienter), funktioniert aber nicht für andere Modelle als das aktuelle Modell.
Tags und Links python django django-rest-framework