假设我有一堂课
class Tags(object):
tags = []
def __init__(self, tags):
self.tags = tags
Run Code Online (Sandbox Code Playgroud)
和自定义列表字段
class TagsField(serializers.WritableField):
"""
Returns a list of tags, or serializes a list of tags
"""
Run Code Online (Sandbox Code Playgroud)
我不太确定从哪里开始.如何确保博客文章序列化程序定义为
class BlogPostSerializer(serializers.Serializer):
post = CharField()
tags = TagsField
Run Code Online (Sandbox Code Playgroud)
会给我一个类似的json对象
{
"post": "Here is my blog post about python",
"tags": ["python", "django", "rest"]
}
Run Code Online (Sandbox Code Playgroud) 我正在努力理解ListField和DictField.我想将它用作序列化程序中的字段.我有一个ListField可能会包含很多DictField.我试着编写一个如下的序列化器:
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = serializers.ListField(
child=serializers.DictField(
idn=serializers.IntegerField(read_only=True),
stops_left=serializers.IntegerField(read_only=True)
),
read_only=True
)
Run Code Online (Sandbox Code Playgroud)
我知道,这没有任何意义,因为文件说,DictField并ListField采取child作为参数.所以,上面的代码自然会引发错误:
TypeError: __ init __()得到一个意外的关键字参数'stops_left'
{
"idn": 1,
"buses": [
{"idn": 11, "stops_left": 4},
{"idn": 12, "stops_left": 15}
]
}
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?buses是一个列表,可能包含我想要的任意数量的元素.