Oczywiście przejrzałem dokumentację, ale zastanawiałem się, czy ktoś mógłby bardziej zwięźle wyjaśnić różnicę w przypadku użycia i aplikacji między tymi polami. Po co używać jednego pola nad drugim? Czy istnieje różnica między tymi polami w związku OneToOne?Dla Django Rest Framework, jaka jest różnica w przypadku użycia HyperLinkedRelatedField i HyperLinkedIdentityField?
Odpowiedz
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
.
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.
Dla pola 'url', wierzę, że masz na myśli' HyperlinkedIdentityField'? A w opisie dwóch różnic, pociski odnoszą się do 'HyperlinkedIdentityField', prawda? – mcastle