如何修复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
相关产品推荐
相关产品推荐

