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

Django中ManyToMany字段序列化问题:单条Submission返回空值

问题分析与解决

核心问题:get_object方法返回错误类型

你的SubmissionView中重写的get_object方法返回的是QuerySet(查询集合),而非单个Submission实例。ModelViewSet的get_object方法要求返回单个模型对象,当你返回QuerySet时,序列化器无法正确解析对象属性,导致所有字段返回null。

原错误代码:

def get_object(self):
    user = self.request.user
    return Submission.objects.prefetch_related('tags').filter(author=user)

修复方案

1. 修正get_object方法

从URL中提取pk参数,筛选出当前用户的单个Submission实例:

def get_object(self):
    user = self.request.user
    pk = self.kwargs.get('pk')
    return Submission.objects.prefetch_related('tags').get(author=user, pk=pk)

2. 修复序列化器关联标签的错误

在startSubmissionSerializer的create方法中,你错误调用了submission.tag.add(tag),但模型中ManyToMany字段的名称是tags,应改为:

submission.tags.add(tag)

此错误会导致标签无法正确关联到Submission实例。

3. 保留正确的查询集逻辑

你的get_queryset方法已经正确过滤当前用户的Submission并预取关联标签,无需修改:

def get_queryset(self):
    user = self.request.user
    return Submission.objects.prefetch_related('tags').filter(author=user)

修复后效果

调用submission/13接口时,会返回与列表接口中一致的完整数据,包括关联的tags列表。

内容的提问来源于stack exchange,提问作者Ayatoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:24