2012-05-30 3 views
1

J'avais une application non-Django existante utilisant MongoDB. Il semblerait que les champs d'objets associés soient stockés par des ObjectID. Par exemple, j'ai un modèle UserProfile qui se rapporte aux objets Utilisateur par OneToOneField. Et les données d'objets stockés était comme:Les champs non-liés de Django stockés dans mongoDB ne sont plus stockés par ObjectIDs?

{ 
    "_id": { 
     "$oid": "4f67540040e0460001000001" 
    }, 
    "user_id": { 
     "$oid": "4f67540040e0460001000000" 
    }, 
    .... 
} 

Je déployé l'application sur Heroku qui utilise git pour aller chercher django nonrel projets et django-mongodb-moteur. La version de pymongo que j'ai utilisée est 2.1.1. Je ne suis pas sûr à cause de la mise à jour de quelle bibliothèque, j'ai trouvé que les champs liés ne semblent plus stockés par ObjectId. Les données de nouveaux objets sont stockées comme:

{ 
    "_id": { 
     "$oid": "4f67540040e0460001000001" 
    }, 
    "user_id": "4f67540040e0460001000000", 
    .... 
} 

Le problème est que cela provoque des erreurs dues à une incohérence de format de données. Non seulement je ne pouvais pas obtenir l'objet connexe d'objets précédemment stockés (obtenir "DoesNotExist: UserProfile requête correspondante n'existe pas."). Les objets connexes des objets nouvellement enregistrés ne pouvaient pas être récupérés par Piston.

J'ai essayé d'ajouter un spécificateur de révision aux URL du référentiel git dans requirements.txt mais je n'ai pas eu de chance, ce qui est bizarre.

Est-ce que quelqu'un sait ce qui se passe? Peut-être que je dois faire une mise à jour de données mongoDB pour corriger ces valeurs d'ID de données connexes?

Répondre

1

Quelle version utilisiez-vous précédemment? - Besoin de connaître aussi les versions de django-nonrel/djangotoolbox.

Il semble que vous ayez à migrer manuellement les données, mais il serait bon d'établir la révision là où le changement est intervenu pour s'assurer qu'il ne s'agit pas d'un changement transitoire.

Questions connexes