django:通过ajax将数据传递给视图,然后进入表单进行清理

时间:2016-02-03 23:42:13

标签: jquery python ajax django forms

好的,到目前为止我理解的是: 我可以将数据从jquery传递到django作为json格式: 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 []的输入。

所以我创建了一个form.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调用:              $就({             url:'/ test_url /',             类型:'POST',             数据:{                 名称:'test',                 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映射为空列表。我如何在表格中捕捉到这一点?它需要是一个对象列表吗? (我试过了)

2 个答案:

答案 0 :(得分:0)

看来你已经使用'形式',那么我所做的是: views.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})

答案 1 :(得分:0)

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

$.ajaxSettings.traditional = true;

在javascript PRIOR中添加该段代码以调用您的帖子请求。 这样做是因为它返回到vanilla flavor jquery,其中list_of_ids []返回到list_of_ids,从那里,在表单中传递request.POST按预期清理数据。