【问题标题】:django: passing data via ajax to views, and then into forms for cleaningdjango:通过ajax将数据传递给视图,然后进入表单进行清理
【发布时间】:2016-05-13 09:50:51
【问题描述】:

好的,这是我目前所理解的: 我可以将数据从 jquery 以 json 格式传递给 django,如下所示: AJAX 数据:{'name' : 'flag', list_of_ids : [12,32,12,32]}

Django 的 request.POST 数据:{'name' : 'flag', 'list_of_ids[]' : [12,32,12,32]}

现在,要访问 django 中的列表,您可以这样做:request.POST.getlist('list_of_ids')

现在,假设我想清理 list_of_ids[] 的输入。

所以我创建了一个 forms.py,名称 = forms.CharField(),list_of_ids = forms.ModelMultipleChoiceField(queryset=ObjectModel.objects.all(), required=False)

返回的“清理”数据恰好是:{'name' : 'flag', 'list_of_ids' : []}

现在我的问题是,我怎样才能使 forms.py 与它一起工作,以便它实际上接受 list_of_ids[],并输出 list_of_ids 的清理数据? 这可能吗?

编辑 这是我的班级表格:

class ModelForm(form.Form):
    name = form.CharField()
    relation = forms.ModelMultipleChoiceField(queryset=ForeignObjects.objects.all(), required=False)

然后是views.py atm:

def test_view(request):
    form = ModelForm(request.POST)
    if form.is_valid():
        #do stuff
    #do stuff

这里是 ajax 调用: $.ajax({ url: '/test_url/', 类型:'POST', 数据: { 名称:'测试', list_of_ids:[12,32,41] } })

好的,如解释,从javascript到django,会是这样的数据:

{
    'name' : 'test',
    'list_of_ids[]' : [12,32,41]
}

这就是 django 看到的。所以访问 list_of_ids[] 将是 request.POST.getlist('list_of_ids[]')。 现在,如果我将它传递给表单,django 不会捕获 list_of_ids[] 而是将 list_of_ids 映射为一个空列表。我如何在表格中捕捉到这个?它需要是一个对象列表吗? (我试过了)

【问题讨论】:

    标签: jquery python ajax django forms


    【解决方案1】:

    看来你已经使用了'form',那么我所做的是: 视图.py:

    if request.method == "POST":
        form = MyForm(request.POST)
        ***do something ***
    else:
        form = MyForm()  # this is an empty form
    return render(request, 'my**.html',{'form':form})
    

    【讨论】:

    • 不,这不是我需要的。所以在我们上面的代码中,如果你从 jquery 传递给 django 这个:list_of_ids = [1,2,3,4] 在 django 中,它将显示为: request.POST: 'list_of_ids[]' : [1 ,2,3,4] 现在,我想通过将其传递给表单来清除它,但是它不会将 list_of_ids[] 识别为 list_of_ids,而是返回 list_of_ids: [],一个空列表,所以我的问题是怎么做我清理了那个 id 列表?
    • 如果你熟悉 pdb: 'import pdb; pdb.set_trace()' 在 'if form.is_valid()' 之前检查你是否得到了cleaned_data。您的表单似乎无效。
    • 它被清理了,它只是删除了 list_of_ids[] 因为它不承认我正在尝试引用 list_of_ids 无论如何,我想从一个 json 对象中捕获一个整数数组并传递它形成这样它为我清理它
    • 我想知道可能有一些类型错误,或者为什么它会删除 list_of_ids。另外,是 list_of_ids 还是 list_of_ids[] ?
    • 从jquery到django,数据如下: { name : ______, list_of_ids[] : [ ,,,], } Django接收它们作为“名称”和“list_of_ids[]”
    【解决方案2】:

    呃,这确实很愚蠢,但解决方案基本上是这样的:

    $.ajaxSettings.traditional = true;
    

    在调用您的发布请求之前,在 javascript 中添加那段代码。 这样做是它回到香草风味的 jquery,其中 list_of_ids[] 回到只是 list_of_ids,然后从那里传递 request.POST 表单中的数据按预期清除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 2020-07-27
      • 1970-01-01
      相关资源
      最近更新 更多