ajax 形式 is_valid 返回 false (django)
Posted
技术标签:
【中文标题】ajax 形式 is_valid 返回 false (django)【英文标题】:ajax form is_valid returns false (django) 【发布时间】:2012-05-11 11:12:33 【问题描述】:我无法弄清楚为什么我的表单返回 false 到 is_valid
我有一个名为 account 的页面,它有一个 ajax 函数来提交表单
我在我的帐户视图和我的 createform 视图中传递我的表单
createform 视图:这是处理我的 ajax 的地方
def createrecipe(request):
print "entering createrecipeview"
if request.method == 'POST':
print "form is a post"
form = RecipeForm(request.POST)
print form.errors
if form.is_valid():
print "form is valid"
form = RecipeForm(initial = 'original_cookbook' : request.user.cookbooks.all()[0])
form = form.save()
if form.cleaned_data['reset_recipe'] == "True":
print "reset recipe"
form = RecipeForm(initial = "original_cookbook": request.user.cookbooks.all()[0])
t = loader.get_template('cookbook/create_form.html')
c = RequestContext(request,
'form': form,
)
data =
'replace': True,
'form': t.render(c),
'success': False,
json = simplejson.dumps(data)
return HttpResponse(json,mimetype='text/plain')
t = loader.get_template('cookbook/create_form.html')
c = RequestContext(request,
'form': form,
)
data =
'replace': True,
'form': t.render(c),
'success': True,
json = simplejson.dumps(data)
return HttpResponse(json, mimetype='text/plain')
else:
print "form is invalid"
form = RecipeForm(request.POST)
t = loader.get_template('cookbook/create_form.html')
c = RequestContext(request,
'form':form,
)
data =
'form': t.render(c),
'success': False,
json = simplejson.dumps(data)
return HttpResponse(json, mimetype='text/plain')
帐户视图:这是我在表单中传递 ajax 视图的地方
def account(request):
user = request.user
if request.user.is_authenticated():
cookbooks = user.cookbooks
if cookbooks.all().exists():
cookbook = cookbooks.all()[0]
form = RecipeForm(request.POST)
recipe_list = cookbook.recipes.all()
else:
raise Http404
else:
return HttpResponseRedirect('/accounts/login')
t = loader.get_template('cookbook/account.html')
c = RequestContext(request,
'form': form,
'recipe_list': recipe_list
)
return HttpResponse(t.render(c))
所以我的问题是当使用 ajax 和 django 时,我需要什么视图来传递表单 有ajax js的页面或者有表单的页面
对不起,如果这令人困惑-如果没有意义,请告诉我,我会详细说明
这是我的 form.errors 打印
<ul class="errorlist"><li>name<ul class="errorlist"><li>This field is required.</li></ul></li><li>ingredients<ul class="errorlist"><li>This field cannot be null.</li></ul></li><li>author<ul class="errorlist"><li>This field is required.</li></ul></li><li>steps<ul class="errorlist"><li>This field cannot be null.</li></ul></li><li>prep_time<ul class="errorlist"><li>This field is required.</li></ul></li><li>type<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
这实际上是有道理的,因为我没有向它没有验证的表单添加任何输入
对不起,我认为这是一场虚惊
这是我的 js
<script type="text/javascript">
$(document).ready(function()
var form = $('form#createrecipeform');
form.submit(function(e)
e.preventDefault();
console.log('ajax form submission function called successfully.');
form = $(this);
console.log(form)
var serialized_form = form.serialize();
$.ajax( type: "POST",
url: $(this).attr('action'),
data: serialized_form,
success: (function(data)
console.log('ajax success function called successfully.');
data = $.parseJSON(data);
if (data.success)
console.log('success');//i dont know what to do here
var newForm = data.form;
form.replaceWith(newForm);
else
console.log('failure');// i also don't know what to do here
var newForm = data.form;
form.replaceWith(newForm);
)
);
return false;
);
);
</script>
凯蒂
【问题讨论】:
更多的澄清确实会有所帮助。您可以发布相关的 JS 。此外,您应该通过打印form.errors
、在 ajax 错误中返回错误并将其记录到 JS 等来调试它,表单会告诉您它为什么无效。
感谢您提供有关 form.errors 的有用信息
你能帮助我理解 ajax 应该在哪里传递我的表单 - 我应该在调用 ajax 的页面和提交表单的页面上传递它,还是两者兼而有之?谢谢
看起来表单缺少很多必填字段。您将不得不显示您的 javascript 代码和可能的 HTML 以确定什么是错误的。您只需要在第一页上的模板中的表单。您的 ajax 视图仅 处理 数据 - 仅在 python 中需要该表单
我已经上传了我的 javascript,但我认为我的表单中有很多缺失的字段,因为现在我正在尝试在关闭 div 时重置表单(摆脱所有“此字段是必需的”警告)而不是重置表单,而是将我重定向到表单操作页面
【参考方案1】:
检查您是否发送每个非空字段。有时您发送的数据属性名称不正确,或者您缺少必填字段。要检查发生了什么,我建议使用 shell 输入数据并访问表单的错误列表。这样做
$python manage.py shell
>>> from yourapp.models import yourClass
>>> data = 'name':'Jefrey','age':27,'home':'NYC'
>>> f = yourClass(data)
>>> f.is_valid()
如果您得到 False ,请执行此操作
>>>f.errors
这样你就会看到发生了什么。有关 Django 文档的更多信息 https://docs.djangoproject.com/en/dev/ref/forms/api/
希望对你有帮助
【讨论】:
以上是关于ajax 形式 is_valid 返回 false (django)的主要内容,如果未能解决你的问题,请参考以下文章
使用ModelForm时,form.is_valid()返回False
ModelForm is_valid() 在单元测试期间总是返回 false
django forms is_valid() 方法总是返回 true 如果所有表单字段的要求都是 false