gpt4 book ai didi

django - 如何解析 DRF 序列化程序中的字符串列表查询参数?

转载 作者:行者123 更新时间:2023-12-03 23:17:12 24 4
gpt4 key购买 nike

我正在构建一个 REST API 来处理以下形式的用户请求:

localhost:8000/search/?categories=<category1>,<category2>&parts=<id1>,<id2>
哪里 ,应该是解析器的分隔符。
我的 View 处理请求并将查询参数传递给序列化程序,但我无法将原始字符串解析为字符串列表。
到目前为止我的尝试:
class StringListField(serializers.ListField):
child = serializers.CharField()

class LookupPartsSerializer(serializers.Serializer):
categories = StringListField()
parts = StringListField()

class LookupParts(APIView):

def get(self, request, format=None):
serializer = LookupPartsSerializer(data=request.query_params)
serializer.is_valid()
return Response(serializer.validated_data)
我想要的输出是这样的:
{
"categories": [
"<category1>",
"<category2>"
],
"parts": [
"<id1>",
"<id2>"
]
}
但现在我得到:
{
"categories": [
"<category1>,<category2>"
],
"parts": [
"<id1>,<id2>"
]
}
所以基本上我正在寻找一个选项来将分隔符参数传递给 StringListField或添加一些自定义解析方法。
笔记:
我知道,如果我从 ?categories=<category1>,<category2>... 更改查询模式至 ?categories=<category1>&categories=<category2>...然后我会得到想要的结果,但我想坚持我原来的方法。

最佳答案

我认为最好的方法是实现客户to_representation() :

def to_representation(self, instance):
data = super(StringListField, self).to_representation(instance)

data['parts'] = data['parts'].split(',') if isinstance(data['parts'], str) else data['parts']
data['categories'] = data['categories'].split(',') if isinstance(data['categories'], str) else data['categories']

return data

希望能帮助到你!

关于django - 如何解析 DRF 序列化程序中的字符串列表查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356456/

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