Django模型formsets和Ajax

 黄家驹1994 发布于 2023-01-19 13:18

我正在尝试使用Ajax提交我的压缩表单集.当请求不是ajax时,代码可以正常工作.但每当我尝试实现Ajax时,我都会收到ValidationError:[u'ManagementForm数据丢失或被篡改']

我的观点:

def App(request):
    lectures = Lecture.objects.all()
    TopicFormSet = modelformset_factory(Topic, extra=0)
    SummaryFormSet = modelformset_factory(Summary, extra=0)
    tquery = Topic.objects.all()
    squery = Summary.objects.all()
    #saving formsets:
    if request.method == 'POST' and request.is_ajax():
        t_formset = TopicFormSet(request.POST)
        s_formset = SummaryFormSet(request.POST) #formset instances
        if t_formset.is_valid() and s_formset.is_valid():
            t_formset.save() and s_formset.save()
            zipped = zip(t_formset.forms, s_formset.forms) #saving them with new data
        else:
                return HttpResponse("not valid formsets, dude") # for testing purposes
    else: #request=GET
        t_formset = TopicFormSet(queryset = tquery)
        s_formset = SummaryFormSet(queryset = squery)
        zipped = zip(t_formset.forms, s_formset.forms)
    return render (request, "app.html", {"lectures" : lectures, "zipped" : zipped, "t_formset" : t_formset, "s_formset" : s_formset})

我的Javascript代码:

$(document).ready(function(){
$(".mygt").click(function(){ // it's a button
    serializedData = $("#id_form-0-name").serialize(); // I didn't know how to "catch" all forms in formset so I am only serializing the first one
    $.ajax({
        url: "/app/",
        type: "post",
        data: serializedData,
        csrfmiddlewaretoken:'{{ csrf_token }}',
        success: alert(serializedData)
    })
    event.preventDefault();
});

});

PS我还在本文中包含了csrf cookie:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax和{%csrf_token%}出现在表单附近.

编辑:我的HTML:

{% csrf_token %} {{ t_formset.management_form }} {{ s_formset.management_form }} {% for topic, summary in zipped %}
{{ topic }}


{{ summary }}

{% endfor %}

Eimantas.. 5

问题是我不知道如何序列化所有formset,我只是序列化第一个字段(用于测试目的).我不知道Django发送所有formset,而不是像我想的那样发送一个字段.所以我换了

serializedData = $("#id_form-0-name").serialize();

有:

serializedData = $("form").serialize();

代码有效!

1 个回答
  • 问题是我不知道如何序列化所有formset,我只是序列化第一个字段(用于测试目的).我不知道Django发送所有formset,而不是像我想的那样发送一个字段.所以我换了

    serializedData = $("#id_form-0-name").serialize();
    

    有:

    serializedData = $("form").serialize();
    

    代码有效!

    2023-01-19 13:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有