gpt4 book ai didi

python - django 1.8-如果表单条目查询结果与数据库不匹配,则在同一页面上显示警报消息,而不是 "None"或引发异常页面

转载 作者:太空狗 更新时间:2023-10-29 22:15:30 25 4
gpt4 key购买 nike

我很感谢下面的回答,但很抱歉,我仍然没有解决这个问题,也许我没有正确理解它们。因此,我为此悬赏以获得更清晰的答案。

用户在表单中输入一些信息后,这些信息作为一个查询来过滤数据库得到结果,如果数据库中没有相应的记录,我怎么能在当前页面显示或重定向警告页面提醒用户“没有相应的数据”。

enter image description here

以图片为例:如果用户输入“EU”和“India”,肯定在数据库中没有对应的记录。并且该表单允许用户将字段留空。

我曾经使用 raise ValidationError,如果查询结果与数据库不匹配,它将转到一个不友好的黄色“异常”页面。我想在提交后立即在同一个表单页面上显示一条错误消息:

views.py

from django.contrib import messages

class InputFormView(FormView):
template_name = 'entryform.html'
form_class = EntryForm

def get_success_url(self):
params = {
'department': self.request.POST.get('company'),
'person': self.request.POST.get('region')
}
return ''.join([reverse('final'), '?', urllib.urlencode(params.items())])

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:
msg="no corresponding data exists!"
form.add_error('department', msg)
form.add_error('person', msg)

elif department =="" and person !="":
if Final.objects.filter(person=person).exists():
queryset=Final.objects.filter(person=person)
return queryset
else:
msg="no corresponding data exists!"
form.add_error('department', msg)
form.add_error('person', msg)

elif ........


else: #if form not valid
messages.error(request, "Error")

def get_context_data(self,**kwargs):
query_set = self.get_queryset()
if query_set is not None:
context["sales"] = self.get_queryset().aggregate(Sum('sales'))

html

 <form method="post">{% csrf_token %}
{% csrf_token %}
{{ formset.management_form }}
{{ formset.errors }}
{{ formset.non_field_errors }}
{{ formset.non_form_errors }}
{{ form.non_field_errors }}
......
<!--select department-->
<div class="field" >
<label> Select department:
{{ form.department }}
{% for department in form.department.choices %}
<option value="department" name= "department" id="id_department">{{department}} </option>
{% endfor %}
</label>
</div>

..........same for person.....

<!--submit-->
<div class="button" id="btnShow"><input type="submit" value="Submit" /></div>

</div>
</form>

如果我不使用 ValidationError 方法,它将重定向到结果页面,所有内容都显示为“无”。但我想显示一条警告消息。我看到网上有个ajax的例子,有点复杂。有没有更简单的实现方式?

提前致谢。

谢谢。

最佳答案

所有这些逻辑都属于表单本身。如果你把它放在 clean 方法中,那么验证错误将被现有的 Django 逻辑捕获,你可以使用 {{ form.non_field_errors }} 在模板中显示错误.

关于python - django 1.8-如果表单条目查询结果与数据库不匹配,则在同一页面上显示警报消息,而不是 "None"或引发异常页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33494689/

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