У меня была такая же проблема, вот мой случай:
Tl; др:
Вам необходимо создать сериализатор для каждой используемой вами встроенной модели и установить его в «отцовский» сериализатор. Таким образом, ваш вывод будет сериализовать вашу встроенную модель.
models.py
class Log(models.Model):
status = models.CharField(max_length=10, default='Sending')
requested = models.DateTimeField(default=timezone.now)
sent = models.DateTimeField(null=True, default=None)
log = ListField(EmbeddedModelField('Log_Event'))
class Log_Message(models.Model):
channel = models.ForeignKey(Channel)
to = models.CharField()
message = models.CharField()
class Log_Event(models.Model):
type = models.CharField()
message = models.CharField()
date = models.DateTimeField(default=timezone.now)
serializers.py
from rest_framework import serializers
from models import Log, Log_Event, Log_Message
class LogMessageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Log_Message
fields = ('channel', 'to', 'message')
class LogEventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Log_Event
fields = ('type', 'message', 'date')
class LogSerializer(serializers.HyperlinkedModelSerializer):
message = LogMessageSerializer()
log = LogEventSerializer()
class Meta:
model = Log
fields = ('status', 'requested', 'sent', 'log')
views.py
from models import Log
from rest_framework import viewsets, filters
from serializers import LogSerializer
class LogViewSet(viewsets.ModelViewSet):
queryset = Log.objects.all()
serializer_class = LogSerializer
filter_fields = ('system', 'message', 'status', 'requested', 'sent', 'log')
JSON output
{
"status": "Sent",
"requested": "2014-07-25T18:06:00.653",
"sent": "2014-07-25T18:06:03.707",
"log": [
{
"type": "starting...",
"message": "Trying to send...",
"date": "2014-07-25T18:06:00.659"
},
{
"type": "success",
"message": "Mail SENT!",
"date": "2014-07-25T18:06:03.707"
}
]
}