Эта проблема возникла в проекте, который я сейчас разрабатываю. Вот решение, которое мы собирались использовать, прежде чем решили сами расширить сериализатор Django. Это должно работать нормально для ваших нужд.
Чтобы решить проблему, не пачкая руки, я бы порекомендовал Полный сериализатор Wadofstuff's Django .
После настройки с помощью вики решение вашего примера будет выглядеть примерно так:
Вам необходимо добавить метод в вашу модель, который возвращает представление Python для QuerySet
.
from django.db import models
from django.core import serializers
class Patient(models.Model):
name = models.CharField('Name', max_length=50)
def extra_address(self):
return serializers.serialize('python', self.address.all())
class Address(models.Model):
town = models.CharField('Town/Village', max_length=50)
patient = models.OneToOneField(Patient, related_name='address')
Затем вы можете добавить метод в список дополнительных возможностей более надежного сериализатора.
from django.core import serializers
print serializers.serialize('json', Patient.objects.all(), extras=('extra_address',))
Ключ extras
будет добавлен в словарь и будет содержать любые дополнительные фрагменты информации, которые вам необходимы.