gpt4 book ai didi

json - Django Rest 框架 : getting lists from query_params without request. getlist

转载 作者:可可西里 更新时间:2023-11-01 16:32:57 28 4
gpt4 key购买 nike

我们使用序列化器来验证进入我们的非基于模型的服务方法的数据。这当然适用于作为 JSON 的 POST,但如果 query_params 中的内容不复杂(不是列表或嵌套),通常也适用于 GET。但是,如果我有这样的事情:

class RequestSerializer(Serializer):
objects = ListField(child=PrimaryKeyRelatedField(queryset=Foo.objects.all()), allow_empty=False)
choice = ChoiceField(choices=my_choices)

在客户端我只是像这样使用 GET:

$.ajax({
type: "GET",
url: '...',
data={
"objects":[1,2,3],
"choice":"mychoice"
...

如果我使用 POST 而不是 GET 并将 contentType 设置为“application/json”,这会起作用,但这不会被 HTTP spec 宽恕.如果能够处理简单的列表用例而无需执行以下操作,那就太好了:

request_serializer = RequestSerializer(data={"objects" :request.query_params.getlist("objects[]")})

是否有一些我遗漏的明显序列化程序技巧告诉序列化程序如何在不手动调用 request.getlist 的情况下获取列表(objects=x&objects=y&objects=z)?其他人为此做了什么,这似乎是一个常见的用例?

编辑:我确实找到了 this post早些时候,但接受的答案是使用 request.getlist,这不是我想要的。

最佳答案

答案是使用 jQuery ajaxSettings

$.ajaxSettings.traditional = true;

如果您在模板中使用 jQuery 并且从我正在阅读的内容来看,它应该可以用于使用 Django 的整个项目,因为它似乎没有像其他语言那样受到同样的限制。

As of jQuery 1.4, the $.param() method serializes deep objects recursively to accommodate modern scripting languages and frameworks such as PHP and Ruby on Rails.

保留此 false 会导致变量作为“objects[]”和处理 HTML 列表的代码 ListField永远不会被调用,因为参数已被替换。

关于json - Django Rest 框架 : getting lists from query_params without request. getlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641252/

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