クラスがあるとしましょう
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
私に似たjsonオブジェクトを与えます
{
"post": "Here is my blog post about python",
"tags": ["python", "Django", "rest"]
}
ORMベースでないオブジェクトのarraysを処理する1つの方法は、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
ORMベースのオブジェクトがある場合は、many = True
属性を使用してSlugRelatedField
を確認します。
Django Rest Frameworkバージョン3.0では、ListFieldも使用できます http://www.Django-rest-framework.org/api-guide/fields/#listfield
Django restフレームワーク、 http://www.Django-rest-framework.org/api-guide/fields/#listfield を参照してください。
例で:
scores = serializers.ListField(
child=serializers.IntegerField(min_value=0, max_value=100)
)
および(その他の表記):
class StringListField(serializers.ListField):
child = serializers.CharField()
これは簡単に思えます(このクラスは受け入れられたanwserよりも後で追加されるかもしれませんが、とにかくこのオプションを追加するのが良いようです)
ちなみに、それはdjang rest framework 3.0以降に追加されました: http://www.Django-rest-framework.org/topics/3.0-announcement/