【发布时间】:2019-11-30 09:46:58
【问题描述】:
我有一个 FORMVIEW,用户从下拉列表中选择一个值,如果他们选择了该值,然后单击提交,它会对 URL 执行 HTTPResponseRedirect,一切都很好。
如果他们忘记输入一个值并单击提交,他们会收到一条错误消息,告诉他们选择一个值。我在表格上做了一个清理以解决这个问题。这一切都很好。
问题是如果用户收到错误消息,然后添加一个值,然后显示所需的输出。如果他们在查看输出后单击浏览器窗口上的后退按钮,仍会显示错误消息。
我已经能够通过在表单中包含 NeverCacheMixin 来解决这个问题,但是当用户单击后退按钮时,他们会得到一个丑陋的确认表单重新提交页面。
用户只是在查找一个值,所以也许有更好的方法来解决这个问题?不涉及更新或删除,它严格来说是在一个页面上查找,它对另一个页面执行 HttpResponseRedirect。
这是我的 FORMVIEW...
class AuthorLookupView(LoginRequiredMixin,NeverCacheMixin,FormView):
form_class = AuthorLookup
template_name = 'author_lookup.html'
def form_valid(self, form):
authorbyname = form.cleaned_data['dropdown']
return HttpResponseRedirect(reverse('Books:author_detail',kwargs = { 'pk' : authorbyna
me.pk }))
这是我的表格......
class AuthorLookup(forms.Form):
dropdown = forms.ModelChoiceField(queryset=User.objects.none(),required=False)
def __init__(self, *args, **kwargs):
super(AuthorLookup, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'name'
def clean(self):
cleaned_data = super(AuthorLookup, self).clean()
dropdown = cleaned_data.get('dropdown')
if dropdown:
pass
else:
self.add_error('dropdown','Author is required.')
pass
return cleaned_data
在一个完美的世界中,我想在成功清理后删除错误消息,这样如果用户单击浏览器的后退按钮,他们将看到表单而不是看到“剩余”错误消息。有没有办法在成功提交后从浏览器内存中删除错误消息,或者我目前使用 NeverCacheMixin 的工作是解决这个问题的最佳方法?
我意识到我可以让我的 forms.ModelChoiceField 成为必需,但我正在尝试自定义整个应用程序中的错误消息,所以我已经排除了这种可能性。
提前感谢您的任何想法。
【问题讨论】:
-
你试过通过ajax实现吗?
-
阿卜杜勒,感谢您的回复。不。我相信如果我在 HTML 中从 Post 更改为 GET,我的问题可以解决。现在解决这个问题。
标签: javascript django django-forms django-templates django-views