相关疑难解决方法(0)

如何在django rest框架中定义列表字段?

假设我有一堂课

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)

django json field list django-rest-framework

27
推荐指数
2
解决办法
3万
查看次数

Django Rest Framework ListField和DictField

我正在努力理解ListFieldDictField.我想将它用作序列化程序中的字段.我有一个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)

我知道,这没有任何意义,因为文件说,DictFieldListField采取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是一个列表,可能包含我想要的任意数量的元素.


环境

  • python 3.5.1
  • django 1.9.6
  • django-rest-framework 3.3.3

python django python-3.x django-rest-framework

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

django ×2

django-rest-framework ×2

field ×1

json ×1

list ×1

python ×1

python-3.x ×1