gpt4 book ai didi

python - 在 request.POST 中处理来自多个表单的数据

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:22 25 4
gpt4 key购买 nike

在我的 CreateViewUpdateView 中,我使用一个表单作为主模型,并使用多个表单来直接创建/更新相关模型:

class MyModelCreateView(CreateView):
model = MyModel
form_class = MyModelForm

MyModelForm 实例化我在其自身中提到的相关字段所需的表单。

我的问题是,当我序列化数据并将其发送到 View 时,它不知道如何处理来自额外表单的数据。当我访问 request.POST 时,该数据将被丢弃。我正在序列化这样的表单:

let data = $('#main-form').serializeArray();
$('.other-form').each(function() {
data.push({name: 'id-' + $(this).data('id'), value: $(this).serializeArray()});
});

这会将以下数组发送到服务器(我在这里将其字符串化以便清晰显示):

[
{
"name": "name",
"value": "some name"
},
{
"name": "id-194",
"value": [
{
"name": "prop1",
"value": "on"
},
{
"name": "prop2",
"value": "some prop"
},
{
"name": "prop3",
"value": "other prop"
}
]
},
{
"name": "id-195",
"value": [
{
"name": "prop2",
"value": "some prop"
},
{
"name": "prop3",
"value": "other prop"
}
]
}
]

但是request.POST的内容是:

<QueryDict: {u'name': [u'some name']}>

请注意所有其他数据是如何被忽略的。我可以通过以下方式将其发送到服务器:

let data = $('#main-form').serializeArray();
$('.other-form').each(function() {
data.push({name: 'id-' + $(this).data('id'), value: $(this).serialize()});
});

但这会产生以下结果:

<QueryDict: {u'id-195': [u'prop1=on&prop2=some+prop&prop3=other+prop'], u'id-194': [u'displayable=on&prop2=some+prop&prop3=other+prop']}

这当然不是我们想要的,因为我们得到的只是一个字符串,而不是准备好的数据。我相信我们需要一本字典来适本地初始化表单。

这是我的ajax函数:

$.ajax({
method: 'POST',
url: editURL,
data: data,
success: function (html) {
$('#mydiv').html(html);
}
});

最佳答案

jQuery 的 serializeArray 方法生成适合转换为 JSON 的数据结构。但您还没有这样做,您正在尝试将其作为表单编码数据发送。

您应该通过实际发送 JSON 并在另一端解析它来使其更简单。

$.ajax({
method: 'POST',
url: editURL,
data: JSON.stringify(data),
contentType: 'application/json',
success: function (html) {
$('#mydiv').html(html);
}
});

...

class MyModelCreateView(CreateView):
model = MyModel
form_class = MyModelForm
def get_form_kwargs(self):
return {'data': json.loads(request.body)}

注意,我不知道您在表单中做什么来“实例化相关字段所需的表单”,但这可能是错误的方法;您应该使用表单和内联相关表单集。虽然,由于这是 Ajax 发布到 Django,所以切换到 Django REST Framework 并使用序列化器来实现此逻辑可能会更好;这些可以轻松处理嵌套对象。

关于python - 在 request.POST 中处理来自多个表单的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54216338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com