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

Django REST API调用get()返回多个Modules对象报错问题求助

报错原因

你的Modules模型中module_name字段没有设置唯一约束,导致数据库里已经存在多条同名的模块记录,当你用Modules.objects.get(module_name=xxx)查询时,匹配到了2条结果,触发了该报错。

你可以先执行以下ORM语句验证数据库中的重复数据:

from django.db.models import Count
Modules.objects.values('module_name').annotate(count=Count('id')).filter(count__gt=1)

执行后会返回所有重复的模块名以及对应的重复条数。


解决方案

1. 修复当前报错

先手动清理数据库中重复的Modules记录,保证每个module_name仅对应一条数据,当前代码即可正常运行。

2. 永久避免重复问题

给Modules模型的module_name字段添加唯一约束,修改后的模型代码如下:

class Modules(models.Model):
    module_name = models.CharField(max_length=50, unique=True) # 添加unique=True约束
    module_duration = models.IntegerField()
    class_room = models.IntegerField()
    def __str__(self):
        return self.module_name

修改完成后执行以下命令同步数据库结构:

python manage.py makemigrations
python manage.py migrate

之后数据库会自动阻止插入同名模块,从根源避免该问题。

3. 可选:代码增加容错处理

你也可以修改视图中的查询逻辑,避免偶发重复直接抛出异常,同时支持自动创建不存在的模块:

for module in data["modules"]:
    # 用filter替代get,避免多结果报错
    module_obj = Modules.objects.filter(module_name=module["module_name"]).first()
    if not module_obj:
        # 模块不存在时自动创建,注意补全其他必填字段的赋值逻辑
        module_obj = Modules.objects.create(
            module_name=module["module_name"],
            module_duration=xxx, # 替换为实际默认值或从请求中取
            class_room=xxx # 替换为实际默认值或从请求中取
        )
    new_student.modules.add(module_obj)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:00