2011-11-04 9 views
2

個々のhtml選択されたユーザー選択をフォームフィールドに問題なく渡す例がたくさんありますが、苦労しています複数選択の場合も同様です。 JQuery.val()関数は適切なデータ配列を作成しているようですが、サーバーのフォームフィールドに空の文字列が表示されます。私はこのアプリケーションを継承し、これにはちょっとしたノブがあります。複数のデータフィールドをJQuery経由でDjangoフォームフィールドに渡す.val()

関連するJavaScript関数は、フォームが、私は、単一のHTMLを選択は、ドロップダウン持っている場合には

<select multiple size="5" class="exemptionfield" id="Lead/lead compounds"> 
<option value="1(a)"> 
    1(a) 
</option> 
<option value="1(b)"> 
    1(b) 
</option> 
<option value="1(c)"> 
    1(c) 
</option> 
<option value="1(d)"> 
    1(d) 
</option> 
etc.... 

よう

class ASubstanceExemption(forms.Form): 
    buttonTitle = 'submit' 
    title = 'not used' 

    sclId = forms.IntegerField() 
    substance = forms.CharField() 
    exemption = forms.MultipleChoiceField(required=False, 
          choices=kExemptions) 
    def handle(self, *args, **kwargs): 
     sclId = self.cleaned_data['sclId'] 
     substance = self.cleaned_data['substance'] 
     exemption = self.cleaned_data['exemption'] 
     print exemption 
etc... 

HTMLを選択ルックスのように見えます

$('.exemptionfield').change(function() { 
    var exemptionfield = $(this) 

    $.ajax({ 
     url: '/form/ASubstanceExemption', 
     type: 'POST', 
     data: { 
      sclId: $('#sclId').val(), 
      substance: exemptionfield.attr('id'), 
      exemption: exemptionfield.val() 
     } 
    }) 
}) 

です単一の選択form.ChoiceField、選択された値(タイプのexemptionfield)は私の形式で免除変数に渡されます。そこには決して問題はなかった。 form.MultipleChoiceFieldに切り替えて、たとえばexemptionfield.val()[0]のように渡す単一の変数を選択すると、これも正常に動作します。それは(例)[u'1(b)']の形式で来るでしょう。しかし、私が[0]を削除し、exemptionfield.val()しか使用しないと、私は自分のフォームに空の配列しか受け取れないようです。結果的に私の印刷作業は[]しか表示されません。しかし、アラート機能を使用してJavaScriptによって送信された値を見ると、1(b)1(c)1(d)というメッセージが送信されてきたことがわかります。

私はここで間違っていますか?おかげさまで

+0

あなたはどのバージョンのJQueryを使用していますか? –

答えて

5

私はだと思います。私はちょうど解決した同じ問題があります。 jQueryの設定を変更する必要があります(this discussionとしてv1.4で新しく、jQuery docsで参照される)ので、POSTデータで送信されるシリアライズされた変数に角括弧を付加しないようにするだけです。代わりにform.cleaned_data [のform.cleaned_dataとしてこれを参照しようとすると

my-form-field[] = 4 
my-form-field[] = 7 

[ '私のフォームフィールド[]']」:

私は.post()my-form-field = $('#my-multi-select').val()を送ったとき、それはとしてそれを送りました。 my-form-field ']が機能しなかった場合、Djangoは括弧なしのフォームフィールド名のみを検索します。とにかく

は、この行を追加:

jQuery.ajaxSettings.traditional = true; 

を...それは私が上記のリンク先の議論に集まりだからこそ

my-form-field = 4 
my-form-field = 7 

としてデータを送信するようになります、デフォルトの動作は、より良い作品PHPとRailsが、Djangoでこの問題を引き起こします。たぶん、Djangoは適応する必要がありますか?

関連する問題