0

同じテンプレート内に 2 つのフォームがあります。1 つは Country タグを現在のユーザー プロファイルに追加し、もう 1 つは Interest タグを追加します。両方のフォームが同じ URL に投稿されます。両方のタグ フィールドがオートコンプリートによってフィルター処理されるため、両方のフィールドに対応するコンテンツが含まれます。国を入力すると、国などのリストが返されます。

国タグ フィールドを検索すると、国タグを追加できます。素晴らしい!ただし、Interest を追加しようとすると、spinner.gif がアクティブになりますが、コンソール内では投稿が 404 を返すため、実際の Interest タグが追加されません。

テンプレート:他の形式は同じです。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>

アヤックス:

$('.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 つのフォームが同じテンプレート内で機能しないことはありますか? 誰かが洞察力を提供できれば、それは大歓迎です。

4

2 に答える 2

1

nameボタンに属性を付ける必要があります。押されたボタンの名前を確認することで、1ページに2つのフォームを投稿できます。これは次のように行うことができます。

テクニック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、見ているのかに応じて、非表示フィールドの属性を変更します。countryinterest

また、DjangoでjQueryを最適な方法で使用していません。のように、情報を送信するときにviews.pyまたはファイルを使用していません。forms.pyjQueryとDjangoを使用するためのこの回答を見てください:JQueryとDjango(ajax + HttpResponse)を使用する方法は?

于 2012-08-20T19:11:08.390 に答える
0

設定で DEBUG を True に設定してみて、コンソール (または Firebug) で結果の 404 ページを確認してください。404 エラーは、URL の欠落が原因ではなく、ビューが入力を拒否したことが原因である可能性があり、デバッグ情報が原因の特定に役立つ可能性があります。

考えられる原因は、コードが の値を入力している可能性があります<input id="country-tag-input">。id が になるとinterest-tag-input、タグの値が設定されず、空のタグ名が Django に送信される可能性があります。

于 2012-08-20T18:57:17.637 に答える