【发布时间】:2015-07-09 00:36:31
【问题描述】:
我正在尝试让Crispy forms Ajax validation 为我的 Django 站点工作,但我不确定应该如何显示错误。当我提交无效表单时,返回的 JSON 表单似乎与原始表单完全相同,所以我不明白错误响应应该如何发生。
按下表单按钮时调用的(缩写)视图:
from crispy_forms.utils import render_crispy_form
from jsonview.decorators import json_view
@login_required
@json_view
def create_lab_device(request, owner):
add_device_form = AddNewDeviceForm(request.POST)
if request.method == 'POST' and add_device_form.is_valid():
# do the stuff to save to database
return {'success':True}
# form not valid, return false with the rendered form
form_html = render_crispy_form(add_device_form)
return {'success':False, 'form_html':form_html}
原始视图中发送的 Crispy 表单:
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Button
from crispy_forms.bootstrap import InlineField
class AddNewDeviceForm(forms.Form):
def __init__(self, *args, **kwargs):
super(AddNewDeviceForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'add-new-device-form'
self.helper.form_class = 'form-inline'
self.helper.form_method = 'post'
self.helper.add_input(Button('submit', 'Add', css_class='btn-default'))
self.helper.layout = Layout(
InlineField('name'),
InlineField('ip'),
)
name = forms.CharField(
label="Name",
max_length=30,
required=True,
)
ip = forms.IPAddressField(
label="IP Address",
max_length=15,
required=True,
)
点击按钮时调用的javascript函数:
function add_device_submit(){
var form_id = '#add-new-device-form';
$('#button-id-submit').on("click",function(){
$.ajax({
url: "new/",
type: "POST",
data: $(form_id).serialize(),
success: function(data){
if (!(data['success'])){
$(form_id).replaceWith(data['form_html']);
} else {
$(form_id).find('.success-message').show();
}
},
error: function(){
$(form_id).find('.error-message').show();
}
});
});
};
当我提交仅输入“名称”字段的表单时,我看不到页面上呈现的任何不同。使用 Firebug 我可以看出浏览器正在重新渲染表单,但它替换的数据与表单创建的原始数据完全相同。
我应该如何显示表单错误? Crispy 教程没有解释应该在哪里显示错误。
【问题讨论】:
标签: javascript python django django-crispy-forms