django is_valid仅在没有断点时失败

时间:2015-01-26 11:44:18

标签: django django-forms inline-formset

美好的一天,

我们有一个基于inlineformset_factory的formset。在处理POST的视图函数中,如果我们在调试时在is_valid行上设置了断点,则is_valid函数只会成功;如果我们在没有断点的情况下使用run或debug,则客户端会收到500错误。这显然很难追查问题!视图代码如下;任何建议都非常感激。

提前致谢, 兰德尔

@login_required
def child_view(request):
    if request.method == 'POST':
        if request.is_ajax():
            parent_id = request.POST['parent_id']
            parent_instance = get_object_or_404(ParentModel, parent_id=parent_id)
            child_formset = ChildInlineFormSet(request.POST, instance=parent_instance)
            print 'before'
            if child_formset.is_valid():
                print 'after' # never gets here unless breakpoint on previous line
                child_formset.save()
                response = json.dumps({'success': 'true'})
                return HttpResponse(response)

1 个答案:

答案 0 :(得分:0)

我认为原因是因为如果is_valid检查通过,你只返回一个HttpResponse,这就是为什么你在其他情况下得到500错误的原因。

您的观点应该更像:

@login_required
def child_view(request):
    if request.method == 'POST':
        if request.is_ajax():
            parent_id = request.POST['parent_id']
            parent_instance = get_object_or_404(ParentModel, parent_id=parent_id)
            child_formset = ChildInlineFormSet(request.POST, instance=parent_instance)
            print 'before'
            if child_formset.is_valid():
                print 'after' # never gets here unless breakpoint on previous line
                child_formset.save()
                response = json.dumps({'success': 'true'}) # why string not bool?
                return HttpResponse(response)
            else:
                response = json.dumps({'success': 'false'})
                return HttpResponse(response)
    return HttpResponseBadRequest()