首页 > 解决方案 > Django表单验证没有函数调用

问题描述

我有以下问题。我有forms.py文件:

@parsleyfy
class FilterWebsitesForm(forms.Form):
     domain = forms.RegexField(min_length=3, regex=re.compile("^[a-zA-Z0-9-_., ]+$"), error_messages={'invalid': ("Only these characters are acceptable in a domain name: letters, numbers, hyphens, spaces, commas and dots.")}, required=False, label='', widget=forms.TextInput(attrs={'placeholder': 'domain', 'class': 'text_search padding_both', 'id': 'domain_id'}))

视图.py

from myapp.forms import FilterWebsitesForm

def websites_display(request):
    limit = 100
    fwfForm = FilterWebsitesForm()
    start = time.clock()
    if request.method == 'POST':
        fwfForm = FilterWebsitesForm(request.POST or None)
    
        if fwfForm.is_valid():
            queries = {}
        ...

main_display.html

<title>{{ title }}</title>
<script type="text/javascript">
    $(document).ready(function(){
        $('#button_search').click(function() {
            $('#first').show();
            $('#records_list').block({ message: null });
        });
    });
</script>

在 main_display.html 文件中,加载程序会一直显示,直到返回结果。当用户输入正确的字符时,加载程序工作正常。返回结果时消失。

当用户在表单中输入错误的字符时,Regexfield 会显示消息,但也会运行 javascript 函数,这不是我想要的,因为加载程序永远运行。

问题是在显示验证错误消息时,未执行 website_display 函数(limit = 100 处的断点),这就是为什么我无法检查 {% if form.errors %} 来运行 javascript 函数的原因。

我找不到有关此问题的任何信息。谢谢你。

标签: djangoformsvalidation

解决方案


您没有提供整个 views.py 函数,但根据您报告的内容,我将首先查看何时会发生什么

if fwfForm.is_valid(): 

是假的。

你可能需要的——同样,你没有提供,但我知道我犯了这个错误——类似于:

def websites_display(request):
    limit = 100
    fwfForm = FilterWebsitesForm()
    start = time.clock()
    if request.method == 'POST':
        fwfForm = FilterWebsitesForm(request.POST or None)

        if fwfForm.is_valid():
           queries = {}
            ... 
        else:
           context = {'form': fwfForm}
           return render(request, 'main_display.html', context)

推荐阅读