2015-07-22 11 views

Odpowiedz

3

byłoby użyć HyperlinkedIdentityField połączyć z obiektem aktualnie odcinkach i HyperlinkedRelatedField link do obiektów związanych z jednego będącego zserializowaną.

Tak więc w przypadku relacji jeden-do-jednego, relacji klucza obcego, relacji wielu do wielu oraz w zasadzie wszystkiego, co wiąże się z relacjami (w modelach Django), należy użyć wartości HyperlinkedRelatedField. Jedynym czasem, w którym używane jest HyperlinkedRelatedField, jest pole url, które można dołączyć do serializera, aby wskazać bieżący obiekt.


W Django REST ramach 3.0.0, istnieje only two differences między HyperlinkedRelatedField i HyperlinkedIdentityField.

  • source jest automatycznie ustawiany na * (bieżącego obiektu)
  • jest on ustawiony na read_only=True, więc nie mogą być zmienione

Co oznacza, że ​​ustawienie HyperlinkedRelatedField z tych właściwości jest dokładnie taki sam jako o HyperlinkedIdentityField.


W starszych wersjach Django REST ram (przed 3.0.0), przy czym HyperlinkedIdentityField kiedyś dedykowany pole do rozwiązywania url dla bieżącego obiektu. Przyjmował on inny zestaw parametrów i nie był podklasą HyperlinkedRelatedField.

+1

Dla pola 'url', wierzę, że masz na myśli' HyperlinkedIdentityField'? A w opisie dwóch różnic, pociski odnoszą się do 'HyperlinkedIdentityField', prawda? – mcastle

3

Oczywistą odpowiedzią jest to, że HyperLinkedIdentityField ma wskazywać tylko na bieżący obiekt, podczas gdy HyperLinkedRelatedField ma wskazywać na coś, do czego odnosi się bieżący obiekt. Podejrzewam, że pod maską dwa różnią się tylko tym, że pole identyfikacyjne ma mniej pracy do wykonania w celu znalezienia odnośnych tras adresów URL modelu (ponieważ powiązany model jest bieżącym modelem), podczas gdy powiązane pole musi właściwie obliczyć właściwe adresy URL dla jakiegoś innego modelu.

Innymi słowy, HyperLinkedIdentityField jest lżejszy (bardziej wydajny), ale nie działa w przypadku modeli innych niż bieżący model.