jquery - 通过 JQuery .val() 将多个数据字段从 <select multiple> 传递到 Django formfield

标签 jquery django django-forms multi-select

我有一个应用程序,其中有很多将单个 html 选择的用户选择传递到表单字段的实例,没有任何问题,但我在多选情况下很难做同样的事情。似乎 JQuery.val() 函数正在创建一个正确的数据数组,但服务器上的表单字段显示一个空字符串。我继承了这个应用程序,但在这方面我有点菜鸟。

相关的javascript函数是

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

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

表格看起来像

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 选择看起来像

<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....

如果我有一个选择 html 下拉列表和一个选择 form.ChoiceField,则选定值(exemptionfield 类型)将传递给我的表格中的豁免变量。那里从来没有出现过问题。例如,如果我切换到 form.MultipleChoiceField 并选择要传递的单个变量,如 exemptionfield.val()[0] 中所示,这也可以正常工作。它将以(示例)[u'1(b)'] 的格式出现。但是,当我删除 [0] 并仅使用 exemptionfield.val() 时,我的表单中似乎只收到一个空数组。我的打印操作仅显示 [] 结果。但是查看 javascript 使用警报函数发送的值,它告诉我它正在发送 1(b),1(c),1(d )

有什么提示我哪里出错了吗? 谢谢。

最佳答案

认为您遇到了我刚刚解决的相同问题。您只需更改 jQuery 中的设置(从 v1.4 开始新设置,按照 this discussion ,并在 jQuery docs 中引用),这样它就不会将方括号附加到 POST 数据中发送的序列化变量中.

当我使用 .post() 发送 my-form-field = $('#my-multi-select').val() 时,它正在发送其为:

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

尝试将其引用为 form.cleaned_data['my-form-field[]'] 而不是 form.cleaned_data['my-form-field'] 不起作用,Django 只查找表单字段名称,而不查找括号。

无论如何,添加这一行:

jQuery.ajaxSettings.traditional = true;

...将使其发送数据为

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

根据我在上面链接的讨论中收集到的信息,默认行为在 PHP 和 Rails 中效果更好,但在 Django 中会导致此问题。也许 Django 应该适应?

关于jquery - 通过 JQuery .val() 将多个数据字段从 <select multiple> 传递到 Django formfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004932/

相关文章:

django - Django 中的全局 formfield_overriding

python - 如何在 Django 中获取带有用户 ID 的 ManyToManyField 对象?

python - 在 Django 中使用相关对象批量创建对象的有效方法是什么?

python - django-admin 中的动态表单

php - PHP 中的 UPDATE 语句需要知道是否选择了新文件

python - Pycharm 错误 Django 在此环境中不可导入

python - 在 Django 中对日期进行分组

javascript - 为什么 Shift+Click 在 Firefox 中为 D3 图像打开新选项卡而不是 HTML 图像

javascript - jQuery - 丢失对 Ajax 刷新的表单的引用

javascript - 在没有服务器根访问权限的情况下构建聊天脚本的有效方法是什么