Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django rest框架中定义列表字段?_Django_Json_List_Field_Django Rest Framework - Fatal编程技术网

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

如何在django rest框架中定义列表字段?,django,json,list,field,django-rest-framework,Django,Json,List,Field,Django Rest Framework,假设我有一节课 class Tags(object): tags = [] def __init__(self, tags): self.tags = tags 和一个自定义列表字段 class TagsField(serializers.WritableField): """ Returns a list of tags, or serializes a list of tags """ 我不太确定从这里到哪里去。如何确保博客文章

假设我有一节课

class Tags(object):

    tags = []

    def __init__(self, tags):
        self.tags = tags
和一个自定义列表字段

class TagsField(serializers.WritableField):
    """
    Returns a list of tags, or serializes a list of tags
    """
我不太确定从这里到哪里去。如何确保博客文章序列化器定义为

class BlogPostSerializer(serializers.Serializer):
    post = CharField()
    tags = TagsField
会给我一个类似于

{
    "post": "Here is my blog post about python",
    "tags": ["python", "django", "rest"]
}
处理非ORM对象数组的一种方法是重写
到\u native
from\u native
方法。就你而言:

类标记字段(serializers.WritableField):
来自本机的def(自身、数据):
如果存在(数据、列表):
返回标签(数据)
其他:
msg=self.error\u消息['invalid']
raise ValidationError(消息)
def至_本机(自身、obj):
返回obj.tags
如果您有一个基于ORM的对象,您希望使用
many=True
属性查看
SlugRelatedField


在Django Rest Framework 3.0版中,还可以使用ListField
django rest框架中还有ListField,请参见

举例如下:

scores = serializers.ListField(
    child=serializers.IntegerField(min_value=0, max_value=100)
)
和(其他符号):

这似乎更简单(可能这个类添加的时间比接受的anwser晚,但无论如何添加这个选项似乎都不错)


顺便说一句,它是从djang rest framework 3.0开始添加的:

如果您使用的是Postgesql,您可以使用一个

文档来创建自定义字段:它现在工作了吗<代码>从_native给出
数据[字段]
,它不是列表,而是最后一个值。(Django 1.6,rest framemork 2.4.3)WritableField可能无法与最新版本的drf一起使用。尝试序列化程序。字段
class StringListField(serializers.ListField):
    child = serializers.CharField()