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

mca*_*tle 11 python django django-rest-framework

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

Kev*_*own 8

你可以使用一个HyperlinkedIdentityField链接到的对象目前被序列化HyperlinkedRelatedField链接到与一个被序列化对象.

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


在Django REST框架3.0.0中,a 和只有两个区别.HyperlinkedRelatedFieldHyperlinkedIdentityField

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

这意味着,设定一个HyperlinkedRelatedField与那些性质是完全一样为具有HyperlinkedIdentityField.


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

  • 对于 `url` 字段,我相信你的意思是一个 `HyperlinkedIdentityField`?在您对这两个差异的描述中,项目符号适用于“HyperlinkedIdentityField”,对吗? (2认同)

sea*_*olf 5

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

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