2015-07-22 5 views

Antwort

3

würden Sie ein HyperlinkedIdentityField verwenden, um das Objekt zu verknüpfen derzeit serialisierten und HyperlinkedRelatedField ist zum einem serialisierten sind im Zusammenhang mit Objekten zu verknüpfen.

Also für eine Eins-zu-Eins-Beziehung, Fremdschlüsselbeziehung, Viele-zu-Viele-Beziehung und im Grunde alles andere mit Beziehungen (in Django-Modellen) möchten Sie eine 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 only two differences ein zwischen HyperlinkedRelatedField und HyperlinkedIdentityField.

  • Die source wird automatisch auf * (das aktuelle Objekt)
  • Es wird auf read_only=True, so dass es nicht geändert werden kann

so dass ein mit diesen Eigenschaften HyperlinkedRelatedField Einstellung ist genau das gleiche wie mit einem HyperlinkedIdentityField.


In älteren Versionen von Django REST Framework (vor 3.0.0), die HyperlinkedIdentityField verwendet ein spezielles Feld, um die URL für das aktuelle Objekt für die Lösung. Es akzeptiert eine leicht anderen Parametersatz und war keine Unterklasse von HyperlinkedRelatedField.

+1

Für ein 'URL'-Feld, ich glaube, du meinst ein' HyperlinkedIdentityField'? Und in Ihrer Beschreibung der zwei Unterschiede gelten die Aufzählungszeichen für "HyperlinkedIdentityField", richtig? – mcastle

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), wird aber nicht für andere Modelle als das aktuelle Modell funktionieren.

Verwandte Themen