【问题标题】:Django 2 forms on 1 page,1 is ajax and 1 is not1 页上的 Django 2 个表单,1 个是 ajax,1 个不是
【发布时间】:2020-09-10 12:28:26
【问题描述】:

使用基于类的视图,我可以成功处理我的普通表单,我的 ajax 表单返回有效并且一切都很好,但是我真的很难弄清楚我应该在哪里处理 ajax 请求,我应该在 get_context_data 中做吗或者在 form_valid 方法中,无论哪种情况都不能正确处理

 def get_context_data(self, **kwargs):
    context = super(POEdit, self).get_context_data(**kwargs)
    context['document_header'] = self.object

    if self.request.POST:
        #Posted Form
        if self.request.is_ajax:
            self.get_ajax_response()
            context['form_comments'] = DocumentCommentsUpdateForm(self.request.POST, instance=self.object)
        context['form_lines'] = DocumentFormSetUpdate(self.request.POST, instance=self.object)
    else:
        #No Post
        context['form_lines'] = DocumentFormSetUpdate(instance=self.object)
        context['form_comments'] = DocumentCommentsUpdateForm()
        context['comments'] = self.get_comments()
    return context

得到下面的ajax响应,它的入口

def get_ajax_response(self):
    data = {
        'pk': 'pk',
    }
    return JsonResponse(data)

在视图中有适当的代码来发送和接收响应

$('#comments-form').submit(function(e){
e.preventDefault();
var serializedData = $(this).serialize();
$.ajax({
    url : "{% url 'po:edit' document_header.id %}",
    type : "POST",
    data : serializedData,
    success : function(json) {
        $('#id_comment').val('');
        console.log(json);
        console.log("success");
    },
    error : function(xhr,errmsg,err) {
        $('#results').html("<div class='alert-box alert radius' data-alert>Oops! We have encountered an error: "+errmsg+
            " <a href='#' class='close'>&times;</a></div>");
        console.log(xhr.status + ": " + xhr.responseText);
    }
});

}

);

【问题讨论】:

    标签: jquery django ajax forms web


    【解决方案1】:

    在不知道你的类层次结构的情况下,我会说你应该重写 post() 方法,而不是 get_context_data()form_valid() 方法。

    试试下面的方法(改编自this obsolete Django documentation):

    def post(self, request):
        if self.request.is_ajax():
            data = {
                'pk': self.object.pk,
            }
            return JsonResponse(data)
        else:
            return super().post(request)
    

    【讨论】:

    • 您先生是救生员!正是这一行做到了:return super().post(request) 我在 post 方法捕获它之前尝试过,但如果不是 ajax,我不明白我打算如何进行正常处理!跨度>
    猜你喜欢
    • 2018-01-21
    • 2015-07-30
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多