DRF 嵌套序列化器。仅写入主键,但读取时获取整个对象

nrg*_*rgx 5 django serialization django-rest-framework

我不需要嵌套的创建/更新操作。我只想将pk创建的对象写入 FK/M2M 字段,并在创建主对象后从该 FK/M2M 字段获取对象。不是它的主键。

例如,我有ValueRelValue模型。这就是它们的关系:

class ValueRel(BaseModel):
    table = models.ForeignKey(
        Table,
        on_delete=models.PROTECT,
    )
    object_id = models.CharField(max_length=36)

    @property
    def related_object(self):
        related_model = self.table.get_model()
        related_object = related_model.objects.filter(pk=self.object_id).first()
        return related_object


class Value(BaseModel):
    profile = models.ForeignKey(
        Profile,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        related_name="app_values",
    )
    # I want to write into this field `pk` and get its object
    value_rel = models.ManyToManyField(
        ValueRel,
        blank=True,
        related_name="values",
    )
    ...
Run Code Online (Sandbox Code Playgroud)

ValueRel创建 的实例并将其写入value_rel的实例后Value,我想获取ValueRel类似对象的实例。

实际结果(来自 API 的 JSON 响应)

"value_rel": [
   "6a740343-0d37-4e6b-ba56-0c60ac51477f"
]
Run Code Online (Sandbox Code Playgroud)

期待这个:

"value_rel": [
   {
       "pk": "6a740343-0d37-4e6b-ba56-0c60ac51477f"
       "table": "Speciality",
       "object_id": "02548144-a27d-4c17-a90b-334ccf9e1892",
       "related_object": "Information system"
   }
]
Run Code Online (Sandbox Code Playgroud)

有没有办法不为预期的对象表示添加另一个字段并从中获取它value_rel

小智 0

可能drf_extra_fields.relations由此可以帮助