首页 > 解决方案 > django 中用于 GenericRelation 的 DRF 可写序列化程序

问题描述

我正在尝试拥有一个可写的序列化程序,它可以在单个 API 中创建/更新模型及其 GenericRelation 目标

class TaggedItem(models.Model):

    tag_name = models.SlugField()
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    tagged_object = GenericForeignKey('content_type', 'object_id')

class Note(models.Model):
    
    text = models.CharField(max_length=1000)
    tags = GenericRelation(TaggedItem)

在上面,我想在 Note 上支持创建/更新端点。数据将是:

{
     "text": "something",
     "tags": [
         {
             "object_id": "1"
             "tag_name": "something"
         },
         {
            ...
            ...
         }
     ]
  }

该文档只有以下简要说明:请注意,使用 GenericRelation 字段表示的反向通用键可以使用常规关系字段类型进行序列化,因为关系中目标的类型始终是已知的。

一种选择当然是覆盖创建,在 NoteSerializer 中更新,提取 TaggedItem 数据并手动调用 TaggedItemSerializer。

但是,由于 Note 是来自多个模型的 GenericRelation 目标,我想避免在每个源模型上都这样做

有没有更好的办法 ?据我所知,创建这些对象所需的所有信息都存在,因为关系的目标是已知的……所以我希望这种模式是具有 DRF 的一流公民。还没有找到任何东西。

标签: djangoserializationdjango-rest-framework

解决方案


推荐阅读