Сериализация объектов внешнего ключа в Django

Я работал над созданием некоторых сервисов RESTful в Django для использования с приложениями Flash и Android.

Разработка интерфейса служб была довольно простой, но я столкнулся с проблемой сериализации объектов, имеющих внешний ключ и многие-многие отношения.

У меня есть такая модель:

class Artifact( models.Model ):
    name                = models.CharField( max_length = 255 )
    year_of_origin      = models.IntegerField( max_length = 4, blank = True, null = True )
    object_type         = models.ForeignKey( ObjectType, blank = True, null = True )
    individual          = models.ForeignKey( Individual, blank = True, null = True )
    notes               = models.TextField( blank = True, null = True )

Затем я бы выполнить запрос на эту модель, как это, используяselect_related(), чтобы быть уверенным, что соблюдаются отношения внешнего ключа:

artifact = Artifact.objects.select_related().get(pk=pk)

Как только у меня есть объект, я сериализую его и возвращаю его обратно в мое представление:

serializers.serialize( "json", [ artifact ] )

Это то, что я возвращаю, обратите внимание, что внешние ключи (object_type и Individual) являются просто идентификаторами связанных объектов.

[
      {
            pk: 1
            model: "artifacts.artifact"
            fields: {
                year_of_origin: 2010
                name: "Dummy Title"
                notes: ""
                object_type: 1
                individual: 1
            }
      }
]

Это здорово, но на что я надеялся при использованииselect_related() было то, что он автоматически заполнил бы поля внешнего ключа связанным объектом, а не только идентификатором объекта.

Я недавно перешел на Django, но потратил немало времени на разработку с CakePHP.

Что мне действительно нравится в Cake ORM, так это то, что он будет следовать отношениям и создавать вложенные объекты по умолчанию с возможностью отмены связей при вызове запроса.

Это позволило очень просто абстрагировать сервисы таким образом, чтобы не требовалось никакого вмешательства в каждом конкретном случае.

Я вижу, что Django не делает этого по умолчанию, но есть ли способ автоматической сериализации объекта и всех связанных с ним объектов? Любые советы или чтение будет высоко ценится.

Ответы на вопрос(5)

Ваш ответ на вопрос