对于Django Rest Framework,HyperLinkedRelatedField和HyperLinkedIdentityField的用例有什么区别?

时间:2015-07-22 14:51:29

标签: python django django-rest-framework

我当然回顾了这些文档,但是想知道是否有人可以更简洁地解释这些字段之间的用例和应用程序的差异。为什么一个人使用另一个领域呢?对于OneToOne关系,这些字段之间是否存在差异?

2 个答案:

答案 0 :(得分:6)

您可以使用HyperlinkedIdentityField链接到当前正在序列化的对象,使用HyperlinkedRelatedField链接到与被序列化的对象相关的对象

因此,对于一对一关系,外键关系,多对多关系以及基本上任何涉及关系的事物(在Django模型中),您希望使用HyperlinkedRelatedField。使用HyperlinkedRelatedField的唯一时间是url字段,您可以在序列化程序中包含该字段以指向当前对象。

在Django REST framework 3.0.0中,HyperlinkedRelatedFieldHyperlinkedIdentityField之间有only two differences

  • source自动设置为*(当前对象)
  • 设置为read_only=True,因此无法更改

这意味着使用这些属性设置HyperlinkedRelatedField 与拥有HyperlinkedIdentityField完全相同

在旧版本的Django REST框架(3.0.0之前)中,HyperlinkedIdentityField曾经是用于解析当前对象的url的专用字段。它接受了略微不同的参数集,而不是HyperlinkedRelatedField的子类。

答案 1 :(得分:4)

显而易见的答案是HyperLinkedIdentityField仅指向当前对象,而HyperLinkedRelatedField旨在指向当前对象引用的内容。我怀疑两者之间的区别仅在于身份字段为了找到相关模型的URL路由而做的工作较少(因为相关模型是当前模型),而相关字段必须实际找出其他模型的正确URL。

换句话说,HyperLinkedIdentityField重量更轻(效率更高),但不适用于当前模型以外的模型。

相关问题