use*_*508 27 django json field list django-rest-framework
假设我有一堂课
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)
mic*_*mit 44
django rest框架中还有ListField,参见http://www.django-rest-framework.org/api-guide/fields/#listfield
通过这些例子:
scores = serializers.ListField(
child=serializers.IntegerField(min_value=0, max_value=100)
)
Run Code Online (Sandbox Code Playgroud)
和(其他表示法):
class StringListField(serializers.ListField):
child = serializers.CharField()
Run Code Online (Sandbox Code Playgroud)
这似乎更简单(也许这个类比被接受的anwser更晚添加,但无论如何都添加此选项似乎很好)
顺便说一句,它是自djang rest framework 3.0以来添加的:http://www.django-rest-framework.org/topics/3.0-announcement/
seb*_*ibe 18
处理非基于ORM的对象的数组的一种方法是覆盖to_native和from_native方法.在你的情况下:
class TagsField(serializers.WritableField):
def from_native(self, data):
if isinstance(data, list):
return Tags(data)
else:
msg = self.error_messages['invalid']
raise ValidationError(msg)
def to_native(self, obj):
return obj.tags
Run Code Online (Sandbox Code Playgroud)
如果你有一个基于ORM的对象,你想看看SlugRelatedField与many = True属性.
从Django Rest Framework 3.0版开始,您还可以使用ListField http://www.django-rest-framework.org/api-guide/fields/#listfield
| 归档时间: |
|
| 查看次数: |
25666 次 |
| 最近记录: |