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

如何修复AttributeError: 'NoneType'对象没有'extraBottles'属性错误?

解决AttributeError: 'NoneType' object has no attribute 'extraBottles'错误

错误核心信息

错误触发在Django项目的employee/views.py第44行:

day_.extraBottles += request.session['extraBottles']

此时变量day_是None类型,无法访问extraBottles属性,因此抛出AttributeError。

完整错误日志:

Internal Server Error: /employee/order/79/
Traceback (most recent call last):
  File "/mnt/c/Users/davep/Desktop/a/Water_management/newenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/mnt/c/Users/davep/Desktop/a/Water_management/newenv/lib/python3.10/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/mnt/c/Users/davep/Desktop/a/Water_management/newenv/lib/python3.10/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/mnt/c/Users/davep/Desktop/a/Water_management/employee/views.py", line 44, in view_order
    day_.extraBottles += request.session['extraBottles']
AttributeError: 'NoneType' object has no attribute 'extraBottles'

原因分析

day_未被正确赋值为有效的模型实例,通常是数据库查询未返回结果导致:

  • 若使用Model.objects.get(...)查询,当无匹配记录时会抛出DoesNotExist异常,若未捕获该异常,后续day_可能未被赋值或赋值为None
  • 若使用Model.objects.filter(...).first()查询,当结果为空时会直接返回None

解决方案

1. 确保day_获取到有效实例

根据你的查询逻辑选择对应处理方式:

方式一:捕获DoesNotExist异常(适配get()查询)

from django.http import HttpResponse
from .models import Day

def view_order(request, order_id):
    # 其他业务代码...
    try:
        # 替换your_condition_here为实际查询条件
        day_ = Day.objects.get(your_condition_here)
    except Day.DoesNotExist:
        return HttpResponse("对应记录不存在", status=404)
    
    # 执行累加操作并保存
    day_.extraBottles += request.session.get('extraBottles', 0)
    day_.save()
    # 其他业务代码...

方式二:判断day_是否为None(适配filter().first()查询)

from django.http import HttpResponse
from .models import Day

def view_order(request, order_id):
    # 其他业务代码...
    # 替换your_condition_here为实际查询条件
    day_ = Day.objects.filter(your_condition_here).first()
    if not day_:
        return HttpResponse("对应记录不存在", status=404)
    
    # 执行累加操作并保存
    day_.extraBottles += request.session.get('extraBottles', 0)
    day_.save()
    # 其他业务代码...

2. 避免request.session的KeyError

直接使用request.session['extraBottles']会在session无该键时触发KeyError,建议用get()方法设置默认值:

request.session.get('extraBottles', 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:30