gpt4 book ai didi

python - django 1.8 - 'NoneType' 对象没有属性 'aggregate'

转载 作者:行者123 更新时间:2023-12-01 04:21:07 25 4
gpt4 key购买 nike

该错误是自行清除的。但我很困惑如何解决这个问题。

如果表单条目在数据库中得到了相应的记录,则没有错误。但是,如果我在数据库中没有相应数据的表单中输入某些内容,则会出现“NoneType”对象没有属性“aggregate”的错误。我知道原因是因为没有查询结果,所以在def context中它无法继续计算。

那么如果无论如何都没有在数据库中找到相应的记录,那么它就不会继续在“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

最佳答案

利用 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 的所有路径确实返回一些内容,以使这种验证更容易。

关于python - django 1.8 - 'NoneType' 对象没有属性 'aggregate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33688288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com