19π
One way to deal with arrays for a non ORM-based object is to override the to_native
and from_native
methods. In your case:
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
If you had an ORM-based object you would like to look at the SlugRelatedField
with the many = True
attribute.
From Django Rest Framework version 3.0 you can also use ListField
http://www.django-rest-framework.org/api-guide/fields/#listfield
50π
There is also the ListField in django rest framework, see http://www.django-rest-framework.org/api-guide/fields/#listfield
wtih the examples:
scores = serializers.ListField(
child=serializers.IntegerField(min_value=0, max_value=100)
)
and (other notation):
class StringListField(serializers.ListField):
child = serializers.CharField()
this seems simpler (maybe this class is added later than the accepted anwser, but seems good to add this option anyway)
By the way, itβs added since djang rest framework 3.0: http://www.django-rest-framework.org/topics/3.0-announcement/
- [Django]-Django translate variable content in template
- [Django]-Are Django SECRET_KEY's per instance or per app?
- [Django]-How to alphabetically order a drop-down list in Django admin?