【问题标题】:Django-Ajax : Form submissionDjango-Ajax:表单提交
【发布时间】:2015-10-03 12:25:22
【问题描述】:

我在提交表单时遇到问题:

我的脚本 JS:

function submit_form(){
    var form = $("#theform").serializeArray();
    var the_players = document.getElementsByName("theplayers");
    var tab_players = [];
    for(variable of the_players){
        var name = variable.id.split("_")[1];
        tab_players.push(variable.value);
        }

    // *** I send a tab and THE FORM ***
   $.post("/myview_players",{"theplayers[]": tab_players,"form[]":form}).done(function(data){window.location.reload();}); 

   return false;
}

还有视图(url:'myview_players'):

...
if request.method == "POST":    
    requete = request.POST
    if requete.is_ajax() :
        form = playersForm(requete.get("form"))

        if form.is_valid() :
            print("Valid ! ")
        else :
            print("Not valid...")
        ...

我将 Ajax 发送的表单传入 playerForm 的参数。 在终端中,显示“无效”消息... 为什么?

【问题讨论】:

  • Django 表单依赖于实际的整个POST 对象,因此将一个字段放入其中是行不通的。特别是如果该字段是一个字符串。也许用 dict 它会起作用。检查您从 requete.get('form') 获得的类型。
  • so requete.get('form') return None but requete.getlist('form[]') return : [u'[object Object]', u'[object Object]', u '[对象对象]'])!和 requet.get('form[]') return u'[object Object]' ...我什么都不懂...

标签: jquery ajax django django-forms


【解决方案1】:

在您的视图中将请求更改为请求。拼写检查?

另外,在 $.post 中,如果您以“form[]”:form 的形式传递,视图将需要一个列表。 尝试做“form”:form

【讨论】:

    【解决方案2】:

    经过大量研究,我找到了解决方案:

    form_data = parse_qs(request.POST['form'].encode('ASCII')) 
    query = QueryDict(request.POST['form'])
    form = playersForm(query)
    

    当我这样做时有效:form.cleaned_data['name_of_field']

    你怎么看? 这是一个好的解决方案吗?

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2020-11-24
      • 2016-08-20
      • 2017-07-26
      • 2021-03-19
      • 2018-07-21
      • 2019-03-24
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多