J'ai travaillé sur le développement de certains services RESTful dans Django pour les utiliser avec des applications Flash et Android.Sérialisation d'objets de clé étrangère dans Django
Développer l'interface de services a été assez simple, mais j'ai rencontré un problème avec la sérialisation des objets qui ont une clé étrangère et de nombreuses relations.
J'ai un modèle comme celui-ci:
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)
alors j'effectuer une requête sur ce modèle comme celui-ci, en utilisant select_related()
, pour être sûr que les relations clés étrangères sont suivies:
artifact = Artifact.objects.select_related().get(pk=pk)
Une fois que j'ai l'objet, je le sérialise, et le renvoie à ma vue:
serializers.serialize("json", [ artifact ])
Voici ce que je reçois, notez que les clés étrangères (object_type et individual) ne sont que les identifiants de leurs objets associés.
[
{
pk: 1
model: "artifacts.artifact"
fields: {
year_of_origin: 2010
name: "Dummy Title"
notes: ""
object_type: 1
individual: 1
}
}
]
Cela tombe bien, mais ce que j'espérais lors de l'utilisation select_related()
était qu'il remplit automatiquement les champs de clé étrangère avec l'objet associé, non seulement l'id de l'objet.
Je suis récemment converti en Django, mais j'ai passé pas mal de temps à développer avec CakePHP. Ce que j'aime vraiment dans le Cake ORM était qu'il suivrait les relations et créerait des objets imbriqués par défaut, avec la possibilité de délier les relations quand vous appeliez votre requête. Cela a rendu très facile l'abstraction des services d'une manière qui ne nécessitait aucune intervention au cas par cas.
Je vois que Django ne le fait pas par défaut, mais existe-t-il un moyen de sérialiser automatiquement un objet et tous ses objets associés? Tous les conseils ou la lecture seraient très appréciés.
[PEP-008] (http://www.python.org/dev/peps/pep-0008) –