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

Django Rest Framework调用内部函数触发AssertionError错误求助

解决DRF视图调用子函数时的AssertionError问题

错误根源

直接调用被@api_view装饰的子函数时,传入的是DRF封装后的rest_framework.request.Request对象,但@api_view装饰器仅接收原始的django.http.HttpRequest对象(WSGI层传递的请求实例),两者类型不匹配导致断言失败。

可行解决方案

方案1:移除子函数的@api_view装饰器

api_option23和api_option45是主视图内部调用的工具函数,并非直接绑定路由的API视图,不需要@api_view处理请求解析、响应格式化等逻辑——主视图已经通过@api_view完成了这些工作。

修改api_option23.py:

# 移除@api_view装饰器
def api_option23(request, identifer, qr_code_id, qr_pks, loggeduser, actions):
    if request.method == "GET" or request.method == "POST":
        nowdate = datetime.now().strftime("%Y-%m-%d %H:%M")
        security_men = SecurityUser.objects.filter(name=loggeduser)
        if security_men:
            for men in security_men:
                username_id = men.pk
                sec_location = men.sec_location
            print(security_men, username_id, sec_location, qr_pks)

修改api_option45.py:

# 移除@api_view装饰器
def api_option45(request, identifer, qr_code_id, qr_pks, loggeduser, actions):
    if request.method == "GET" or request.method == "POST":
        nowdate = datetime.now().strftime("%Y-%m-%d %H:%M")
        security_men = SecurityUser.objects.filter(name=loggeduser)
        if security_men:
            for men in security_men:
                username_id = men.pk
                sec_location = men.sec_location
            print(security_men, username_id, sec_location)

方案2:传递原始HttpRequest实例

如果必须保留子函数的@api_view装饰器(不推荐),可以调用时传入DRF Request对象的_request属性,该属性指向原始的django.http.HttpRequest实例:

修改主视图的调用代码:

elif action ==2:
    api_option23(request._request, identifer,
                 qr_code_id,
                 qr_pks,
                 loggeduser,
                 actions)
elif action ==3:
    api_option45(request._request, identifer,
                 qr_code_id,
                 qr_pks,
                 loggeduser,
                 actions)

推荐方案

优先选择方案1,子函数作为内部逻辑复用单元,无需独立API视图的装饰器,这样的设计更简洁,也能避免不必要的请求处理开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:27