如何在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()