Serializar objetos de clave externa en Django

He estado trabajando en el desarrollo de algunos servicios RESTful en Django para usarlos con aplicaciones Flash y Android.

Desarrollar la interfaz de servicios ha sido bastante simple, pero me he encontrado con un problema con la serialización de objetos que tienen una clave externa y muchas relaciones.

Tengo un modelo como este:

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 )

Luego realizaría una consulta en este modelo como este, usandoselect_related(), para asegurarse de que se sigan las relaciones de clave externa:

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

Una vez que tengo el objeto, lo serializo y lo devuelvo a mi vista:

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

Esto es lo que obtengo, tenga en cuenta que las claves externas (object_type e individual) son solo las identificaciones de sus objetos relacionados.

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

Esto es genial, pero lo que esperaba cuando usabaselect_related() era que llenaría automáticamente los campos de clave externa con el objeto relacionado, no solo la identificación del objeto.

Recientemente me convertí a Django, pero pasé bastante tiempo desarrollando con CakePHP.

Lo que realmente me gustó de Cake ORM fue que seguiría las relaciones y crearía objetos anidados por defecto, con la capacidad de desvincular las relaciones cuando estaba llamando a su consulta.

Esto facilitó la abstracción de los servicios de una manera que no requirió ninguna intervención caso por caso.

Veo que Django no hace esto por defecto, pero ¿hay alguna forma de serializar automáticamente un objeto y todos sus objetos relacionados? Cualquier consejo o lectura sería muy apreciada.

Respuestas a la pregunta(5)

Su respuesta a la pregunta