将查询字符串反序列化为querydict(由AJAX发送)

将查询字符串反序列化为querydict(由AJAX发送),ajax,django,Ajax,Django,也许这是我序列化不好的问题,但我在反序列化数据时遇到了问题: 我将通过AJAX(通过POST)向视图发送一个模型表单。没有错误,但是保存的模型表单在我的模型中创建了一个空项 我已经检查了调试器的请求。POST:有一个键对应于AJAX发送的内容,但它不是一个QueryDict,而是一个字符串: request.POST['keyinrequestpost']='csrfmiddlewaretoken=pA...zutQ&FirstField=blablablad&SecondField=blabl

也许这是我序列化不好的问题,但我在反序列化数据时遇到了问题:

我将通过AJAX(通过POST)向视图发送一个模型表单。没有错误,但是保存的模型表单在我的模型中创建了一个空项

我已经检查了调试器的
请求。POST
:有一个键对应于AJAX发送的内容,但它不是一个QueryDict,而是一个字符串:

request.POST['keyinrequestpost']='csrfmiddlewaretoken=pA...zutQ&FirstField=blablablad&SecondField=blablabla&ThirdField=blablablabla'

显然,这样做:

MyModelForm(request.POST['keyinrequestpost'])

由于不是QueryDict,无法工作(创建的项目只有空字段)? 我以为转换是自动的

如何将其反序列化以获得MyModelForm()可用的查询信息

我的AJAX:

$(document).ready(function(){
$('#newword_form').bind('submit', function(e){
    var newword_form = $('#newword_form')
    newword_form_serialized = newword_form.serialize();
    $.ajax({url: '/create_newword/', 
            type: 'POST',
            dataType: 'json',
            data:{csrfmiddlewaretoken: '{{ csrf_token }}', 
                'newword': newword_form_serialized } , 
            success: function(data){ 
            ...
我的看法是:

if 'newword' in request.POST.keys(): # the form has been posted
        f = MyModelForm(request.POST['newword'])
        if f.is_valid():
            word = f.save() 
            return render(request, ...

您不需要以这种方式发送
csrf\u令牌。如果它在你的表格里这就是它应该位于的位置,然后您可以简单地序列化表单并将其发送到数据中

序列化后,csrf令牌和所有表单数据将包含在字典中并发送到服务器。然后,您只需在视图中访问它

试试这个(JavaScript):

然后在您的views.py中:

f = MyModelForm(request.POST)
会很好用的

如果没有,告诉我

附加说明:我希望您的html看起来像这样:

<form method="post">
        {% csrf_token %}
        <h4>Form Title</h4>
        {{ form.as_p }}
        <button type="submit">Submit</button>
</form>

{%csrf_令牌%}
表格标题
{{form.as_p}}
提交

希望这有帮助。谢谢。

回答得太好了!非常感谢您抽出时间。Ajax中的“错误”部分对我解决进一步的问题帮助很大。
<form method="post">
        {% csrf_token %}
        <h4>Form Title</h4>
        {{ form.as_p }}
        <button type="submit">Submit</button>
</form>