错误是自我清晰的。但我对如何解决它感到困惑。
如果表单条目在数据库中获得相应的记录,则没有错误。但是如果我在数据库中没有相应数据的表单中输入某些内容,那么“NoneType”对象的错误就会显示没有属性“aggregate”。我知道原因是因为没有查询结果,因此在def上下文中它无法继续计算。
因此,如果无论如何都没有在数据库中找到相应的记录,那么它将不会继续在“def get_context_data”中进行计算以避免此错误?因此,页面将保留在当前数据输入页面上,而不会重定向到另一页面以显示结果。
任何建议都表示赞赏,提前谢谢。
views.py
from django.contrib import messages
class FinalView(ListView):
context_object_name = 'XXX'
template_name = 'XXX.html'
model = Final
def get_queryset(self):
form = InputForm(self.request.GET)
if form.is_valid():
department = form.cleaned_data['department']
person = form.cleaned_data['person']
if department !="" and person !="":
if Final.objects.filter(department=department,person=person).exists():
queryset=Final.objects.filter(department=department,person=person)
return queryset
else:
form.add_error(ValidationError('No corresponding data exists'))
elif department =="" and person !="":
if Final.objects.filter(person=person).exists():
queryset=Final.objects.filter(person=person)
return queryset
else:
form.add_error(ValidationError('No corresponding data exists'))
elif ........
else: #if form not valid
messages.error(request, "Error")
def get_context_data(self,**kwargs):
context["sales"] = self.get_queryset().aggregate(Sum('sales'))
按建议编辑
.........Before are the same....
def get_context_data(self,**kwargs):
query_set = self.get_queryset()
if query_set is not None:
context = super(FinalView, self).get_context_data(**kwargs)
context["sales"] = query_set.aggregate(Sum('sales'))
return context
答案 0 :(得分:2)
使用django查询集对您有利的事实,它不会进行数据库查询,直到它需要数据,所以只需将其拆分以进行一些验证
query_set = self.get_queryset()
context = super(FinalView, self).get_context_data(**kwargs)
if query_set is not None:
context['sales'] = query_set.aggregate(Sum('sales'))
return context
您可能还需要确保来自get_queryset
的所有路径确实返回了一些内容,以便更轻松地进行此类验证。