2016-06-09 5 views
4

Я не могу понять разницу между HyperlinkedIdentity и HyperlinkedRelated Fields. У меня есть несколько вопросов, на которые я не могу найти ответы в Интернете.Django Rest Framework Гиперссылки Понимание

В чем разница? Когда я хочу использовать один против другого.

Мой следующий вопрос: у меня есть 2 модели, проект и задача.

Задача имеет проект ForeignKey для проекта. Если бы я хотел, чтобы проект гиперссылка на задачи внутри него, какое поле гиперссылки было бы помещено в ProjectSerializer? И какое поле я бы поставил в TaskSerializer, чтобы дополнить ProjectSerializer, полагая, что я хотел, чтобы задачи могли ссылаться на проект, к которому они относятся?

В чем разница между использованием гиперссылнных полей и использованием обычных вложенных сериализаторов? При использовании гиперссылок, могу ли я по-прежнему фильтровать pk/id?

Последнее. Что, если у модели было два гиперссылки в сериализаторе? Насколько я понимаю, он создает поле url для каждой гиперссылки, создаст ли он два поля url в этом случае?

Благодарим за любые разъяснения, которые вы можете предложить, это будет огромной помощью для укрепления моего понимания предмета и предоставления мне возможности заполнить мой API для моего проекта.

ответ

5

В чем разница? Когда я хочу использовать один против другого.

HyperlinkedIdentityField является полем гиперссылки для самого текущего объекта в то время как HyperlinkedRelatedField представляют собой гиперссылка на другие случаи.

Задача имеет проект ForeignKey для проекта. Если бы я хотел, чтобы проект гиперссылка на задачи внутри него, какое поле гиперссылки было бы помещено в ProjectSerializer? И какое поле я бы поставил в TaskSerializer, чтобы дополнить ProjectSerializer, полагая, что я хотел, чтобы задачи могли ссылаться на проект, к которому они относятся?

HyperlinkedRelatedField - это то, что вы ищете.

В чем разница между использованием гиперссылок в сравнении с использованием обычных вложенных сериализаторов?

Гиперссылки могут быть просмотрены независимо от исходного ресурса. Удобно, если один из них принадлежит другой системе. Например, вы, скорее всего, захотите использовать гиперссылку на твиты, а не позволять своему серверу извлекать их, и они возвращают их вложенные. Гиперссылки также позволяют клиенту работать с собственным кэшированием, а не отправлять обратно все данные. Может быть удобно в случае получения списка элементов, которые гнездятся одним и тем же пользователем.

С другой стороны, гиперссылки увеличивают счетчик сетевых запросов, потому что ему нужно получить больше данных.

При использовании гиперссылок, могу ли я по-прежнему фильтровать pk/id?

Не уверен, что вы имеете в виду здесь.

Что делать, если у модели было два гиперссылки в сериализаторе? Насколько я понимаю, он создает поле url для каждой гиперссылки, создаст ли он два поля url в этом случае?

Исправить. гиперсвязанные отношения - это просто представление отношения. Он предоставляет гиперссылку (uri) для извлечения связанного объекта.

Это полезно, потому что вам не нужно знать шаблон для извлечения объекта из id: с помощью PrimaryKeyRelatedField вы получите идентификатор, но у вас отсутствует URL-адрес для извлечения связанного объекта.

Это также позволяет серверу управлять своим собственным пространством uri без необходимости обновления клиентов.

Надеюсь, это поможет.

+0

Спасибо, огромная помощь !!! – shenk

Смежные вопросы