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

Django接口异常:POST数据提交成功但前端返回AssertionError,单条数据查询接口失效

问题解决:Django REST Framework视图错误修复

我来帮你搞定这两个接口的问题,咱们逐个分析:

1. POST接口的AssertionError问题

错误原因

你的postData视图在序列化器验证通过并保存数据后,没有返回任何响应对象。Django REST Framework要求视图必须返回Response、HttpResponse或HttpStreamingResponse类型的实例,但当前代码执行完serializer.save()后就结束了,默认返回None,这直接触发了断言错误。

修复代码

修改postData视图,在保存成功后返回序列化的数据,同时处理验证失败的情况:

from rest_framework import status  # 记得导入status模块

@api_view(['POST'])
def postData(request):
    serializer = WalletSerializer(data = request.data)
    if serializer.is_valid():
        serializer.save()
        # 返回创建成功的数据,并设置标准的201创建状态码
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    # 验证失败时返回错误信息和400错误状态码
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

2. 单条数据获取接口失效问题

错误原因

Wallet.objects.all(id=pk)是完全错误的用法:all()方法不接受任何参数,它的作用是返回模型的所有对象。你需要使用get()方法根据主键获取单条记录,或者用filter()筛选后取第一条。

修复代码

推荐使用get()并处理记录不存在的异常(更符合RESTful规范):

from rest_framework import status

@api_view(['GET'])
def getSingleData(request,pk):
    try:
        # 根据id获取单条Wallet记录
        wallet = Wallet.objects.get(id=pk)
    except Wallet.DoesNotExist:
        # 如果记录不存在,返回404错误提示
        return Response({"error": "Wallet not found"}, status=status.HTTP_404_NOT_FOUND)
    serializer = WalletSerializer(wallet, many=False)
    return Response(serializer.data)

如果你不想处理异常,也可以用filter()加判断的方式:

@api_view(['GET'])
def getSingleData(request,pk):
    wallet = Wallet.objects.filter(id=pk).first()
    if not wallet:
        return Response({"error": "Wallet not found"}, status=status.HTTP_404_NOT_FOUND)
    serializer = WalletSerializer(wallet, many=False)
    return Response(serializer.data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:17:39