【问题标题】:2 forms posting to the same place. One works the other does not2 张表格张贴到同一个地方。一个有效,另一个无效
【发布时间】:2012-08-20 18:11:21
【问题描述】:

我在同一个模板中有 2 个表单。一个将国家标签添加到当前用户配置文件中,另一个添加兴趣标签。两种形式都发布到同一个 url。两个标签字段都通过自动完成过滤,因此两个字段都有相应的内容。国家输入将返回国家列表等。

当我搜索国家标签字段时,我可以添加国家标签。惊人的!但是,当尝试添加兴趣时,spinner.gif 被激活,但在我的控制台中,帖子返回 404,因此没有添加实际的兴趣标签。

模板:其他形式同理,只需将ids:Country替换为Interest即可。

<form id="addCountryTagForm" class="add_tags_form" method="POST" action="/tag/add/"> 
     {% csrf_token %}
     <input id="country-tag-input" class="input-text inline required tag-select" name="tagname" type="hidden" />
     <button class="btn addtag" type="submit" id="addCountryTag">
           <span>Add</span>
      </button> 
</form>

ajax:

$('.add_tags_form').submit(function(e) {
     var $this = $(this);
     var $loader = $('<div class="tag-loader"><img src="/static/images/misc/spinner.gif" /></div>');
     $this.append($loader);

     e.preventDefault();
     var action = $this.attr("action");

     result = $.ajax({
          url: action,
          data: {
               'csrfmiddlewaretoken':$('input[name^="csrfmiddlewaretoken"]').val(),
               'tagname':$('input[name^="tagname"]').val()
           },
           type: "POST",
           success: function(data) {
                $('.tag-section').load('/account/tag-section/');
                $('input[name^="tagname"]').val('');
                $loader.remove();
           },
           error: function(jqXHR, textStatus, errorThrown) {
                $loader.remove();
           }
       });
       return false;
 });

我真的不知道为什么这不起作用。我想要实现的目标是不是遥不可及?发布到同一个 url 的 2 个表单不能在同一个模板中工作吗?如果有人能提供洞察力,将不胜感激。

【问题讨论】:

  • 究竟是什么不工作?指定预期行为和实际行为是什么?
  • 我做了一些修改。希望它能解决一些问题。

标签: python django django-forms


【解决方案1】:

你需要给你的按钮一个name 属性。通过检查按下的按钮的名称,您可以在一个页面上发布两个表单。可以这样做:

技巧1

...
if form.is_valid():
    if "button1" in request.POST:
        # do things for form 1
    elif "button2" in request.POST:
        # do things for form 2
...

技巧2

根据您查看的是country 还是interest,更改隐藏字段的name 属性。

您也没有以最好的方式将 jQuery 与 Django 一起使用。例如,您在提交信息时没有使用views.pyforms.py 文件。看看这个使用 jQuery 和 Django 的答案:How to use JQuery and Django (ajax + HttpResponse)?

【讨论】:

  • 看来我的问题在于name="tagname" 的两种形式。
  • 是的,除了将 id 从 country 更改为 interest 之外,您还应该创建唯一的名称,以便您知道正在查看哪个。您也可以保持名称不变,并使提交按钮的名称唯一,这样您就知道您正在查看的是哪一个。
【解决方案2】:

尝试在设置中将DEBUG设置为True,通过控制台(或Firebug)查看结果404页面; 404 错误可能不是由缺少 URL 引起的,而是由视图拒绝输入引起的,调试信息可以帮助查明原因。

一个可能的原因可能是填充&lt;input id="country-tag-input"&gt; 值的任何代码。如果 id 变为interest-tag-input,这可能会导致标签的值未设置,从而向 Django 发送一个空的标签名。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2021-11-02
    • 2023-02-16
    • 2019-10-10
    • 2021-07-23
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多