Django RF用单个序列化器创建查询多关联模型返回报错如何解决
问题根因
触发报错的核心原因是:Item模型不存在名为makers的属性,序列化器在序列化返回结果时,无法从Item实例读取到makers对应的值。
你定义的MakerItem关联表中,指向Item的外键字段item_id默认的反向关联名为makeritem_set,而非你用的makers,因此序列化器读取字段时直接报错。
另外你贴的create方法存在笔误:item_id=check_instance应该改为item_id=item_instance,否则创建关联记录时会直接报变量未定义错误,你实际代码里应该是写对了只是贴的时候写错了。
解决步骤
有两种可选方案,选其一即可:
方案1:修改模型配置(更推荐)
给MakerItem表的item_id外键添加related_name参数,指定反向关联名为makers,修改后模型代码如下:
class MakerItem(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4) item_id = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="makers") maker_id = models.ForeignKey(Maker, on_delete=models.CASCADE)
修改后执行makemigrations和migrate更新数据库配置即可,不需要改序列化器代码。
方案2:修改序列化器字段配置
如果不想改模型,可以直接给序列化器的makers字段指定source参数,绑定到默认的反向关联名:
makers = MakerItemSerializer(many=True, source="makeritem_set")
可选优化
如果后续你希望返回的makers列表里直接带制造商名称而非只有id,还可以调整嵌套序列化器的逻辑,把Maker的字段也嵌套返回即可。
内容的提问来源于stack exchange,提问作者obvionaoe
相关产品推荐
相关产品推荐

