Отправка 2 форм в одно и то же место. Один работает, другой нет

У меня есть 2 формы в одном шаблоне. Один добавляет теги страны в профиль текущего пользователя, другой добавляет теги интересов. Обе формы размещаются по одному и тому же URL-адресу. Оба поля тега фильтруются с помощью автозаполнения, поэтому оба поля имеют соответствующее содержимое. Ввод страны вернет список стран и т. Д.

Когда я выполняю поиск в поле Country Tag, я могу добавить тег страны. Потрясающий! Однако при попытке добавить интерес активируется spinner.gif, но в моей консоли сообщение возвращает 404 и, следовательно, не добавляет фактический тег интереса.

Шаблон. Другая форма такая же, просто замените идентификаторы: 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-адрес, не работать в одном шаблоне? Если бы кто-нибудь мог предложить inisight, был бы очень признателен.


person Modelesq    schedule 20.08.2012    source источник
comment
Что именно не работает? Укажите, какое поведение ожидается, а какое на самом деле?   -  person Ihor Kaharlichenko    schedule 20.08.2012
comment
Я внес некоторые правки. Надеюсь, это кое-что проясняет.   -  person Modelesq    schedule 20.08.2012


Ответы (2)


Вам необходимо присвоить кнопке атрибут 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

Измените атрибут name скрытого поля в зависимости от того, смотрите ли вы на country или interest.

Вы также не используете jQuery с Django так, как это можно было бы сделать лучше всего. Например, вы не используете файлы views.py или forms.py при отправке информации. Взгляните на этот ответ для использования jQuery и Django: Как использовать JQuery и Django (ajax + HttpResponse)?

person Glenn Dayton    schedule 20.08.2012
comment
Кажется, моя проблема связана с name="tagname" в обеих формах. - person Modelesq; 21.08.2012
comment
Да, в дополнение к изменению идентификатора с country на interest вы также должны создать уникальные имена, чтобы вы знали, какое из них просматривается. Также вы можете оставить имя таким же и сделать имя кнопки отправки уникальным, чтобы вы знали, на какую из них вы смотрите. - person Glenn Dayton; 21.08.2012

Попробуйте установить DEBUG в True в настройках и посмотрите страницу с результатом 404 через консоль (или Firebug); ошибка 404 может быть вызвана не отсутствующим URL-адресом, а представлением, отклоняющим ввод, и отладочная информация может помочь в точном определении причины.

Возможной причиной может быть любой код, заполняющий значение <input id="country-tag-input">. Если идентификатор становится interest-tag-input, это может привести к тому, что значение тега не будет установлено, тем самым отправив пустой тег в Django.

person LSerni    schedule 20.08.2012