2009-05-26 6 views
0

J'ai un modèle Django créé pour App Engine de Google,Régler la profondeur de récursivité maximale lors de la sérialisation un modèle Django avec clé étrangère à JSON

Model A(): 
    propA = ReferenceProperty(B) 

Model B(): 
    propB = ReferenceProperty(C) 

Model C(): 
    propC = ReferenceProperty(B) 

je l'ai écrit sur mesure Django sérialiseur qui récupérera les données pour le ReferenceProperty (s) et sérialiser cela le long du modèle initial.

Le problème se produit lorsque j'essaie de sérialiser une instance de Modèle A. Mon sérialiseur personnalisé va essayer d'obtenir propA, qui contient une référence à modèle C de sorte que le sérialiseur va chercher modèle C, qui contient une référence à Model B et la récursion se poursuit et. Y at-il un moyen d'arrêter la récursivité après une profondeur de dire 2?

Mon sérialiseur est une version personnalisée de link text

P.S: Je suis prêt à publier mon code si cela semble nécessaire. Je n'ai pas actuellement attaché le code puisque je ne suis pas à ma machine de développement.

Merci,
Arun Shanker Prasad.

Répondre

0

Pourquoi ne faites-vous pas la récursion correctement? Toute opération récursive doit avoir un base case, sinon elle continuera indéfiniment, comme l'indique votre problème.

2

Il suffit de modifier vos fonctions pour prendre un argument «profondeur». Chaque fois que vous suivez un objet ReferenceProperty, appelez la fonction avec une profondeur inférieure à la profondeur qui a été transmise. Si une fonction est appelée avec profondeur == 0, retour None, ou toute autre valeur d'espace réservé appropriée dans votre cas.

0

J'essaie de trouver un sérialiseur qui fonctionne avec Google App Engine et qui suit les relations. Serait-il possible pour vous d'afficher le code modifié que vous avez utilisé pour le faire?

Questions connexes