首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅在Django表单中提交后引发验证错误

仅在Django表单中提交后引发验证错误
EN

Stack Overflow用户
提问于 2015-11-13 22:08:25
回答 1查看 262关注 0票数 0

在创建表单并设置required=True之后,表单会在加载页面时立即显示验证错误。当然,这应该只在提交之后发生。

我如何才能确保只有在提交后才显示正确的错误?

forms.py

代码语言:javascript
运行
复制
class CurrencyConverterForm(forms.Form):
    base_currency = forms.ModelChoiceField(queryset=Currency.objects.all(), required=True)
    counter_currency = forms.ModelChoiceField(queryset=Currency.objects.all(), required=True)
    base_amount = forms.FloatField(required=True)

index.html

代码语言:javascript
运行
复制
<form action="" method="get">
    {{ form.non_field_errors }}
    <div class="fieldWrapper">
        {{ form.base_currency.errors }}
        <label for="{{ form.base_currency.id_for_label }}">From Currency</label>
        {{ form.base_currency }}
    </div>
    <div class="fieldWrapper">
        {{ form.counter_currency.errors }}
        <label for="{{ form.counter_currency.id_for_label }}">To Currency</label>
        {{ form.counter_currency }}
    </div>
    <div class="fieldWrapper">
        {{ form.base_amount.errors }}
        <label for="{{ form.base_amount.id_for_label }}">Amount</label>
        {{ form.base_amount }}
    </div>
</form>

views.py

代码语言:javascript
运行
复制
def index(request):
    counter_amount = ""
    if request.method == 'GET':
        form = CurrencyConverterForm(request.GET)
        if form.is_valid():
            # Get the input data from the form
            base_currency = form.cleaned_data['base_currency']
            counter_currency = form.cleaned_data['counter_currency']
            base_amount = form.cleaned_data['base_amount']

            # Calculate the counter_amount
            counter_amount = get_conversion_amount(base_currency, counter_currency, datetime.now(), base_amount)
            # Retrieve the counter amount from the dict
            counter_amount = counter_amount['GetConversionAmountResult']
            # Maximize the number of decimals to 4
            if counter_amount.as_tuple().exponent < -4:
                counter_amount = "%.4f" % counter_amount

    else:
        form = CurrencyConverterForm()

    context = {
        'form': form,
        'counter_amount': counter_amount
    }

    return render(request, '../templates/client/index.html', context)
EN

回答 1

Stack Overflow用户

发布于 2015-11-13 22:12:39

问题是这两个请求都是get :获取表单的初始请求和提交表单的请求。所以检查if request.method == 'GET'是没有意义的,因为它总是正确的。

相反,请检查GET字典中是否确实存在信息:

代码语言:javascript
运行
复制
if request.GET:

请注意,如果您需要在完全空的提交上显示错误,这将不起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33694614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档