You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:36:03