Worin besteht der Unterschied im Anwendungsfall für Django Rest Framework für HyperLinkedRelatedField und HyperLinkedIdentityField?

9

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?

    
mcastle 22.07.2015, 14:51
quelle

2 Antworten

4

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 .

  • Die source wird automatisch auf * (das aktuelle Objekt)
  • gesetzt
  • Es ist auf 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 .

    
Kevin Brown 22.07.2015, 23:04
quelle
3

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.

    
seawolf 22.07.2015 18:59
quelle