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