2012-03-12 4 views
1

J'utilise django-nonrel en combinaison avec mongodb-engine. Cela fonctionne parfaitement si tous les champs stockés dans un objet mongodb sont également définis sur le modèle.Accéder aux données Mongodb d'origine d'un modèle Django

Mais j'ai des données supplémentaires sur l'objet mongodb, qui ne sont pas définies sur le modèle. Et c'est mon problème. Pour l'instant je fais une requête supplémentaire pour obtenir l'objet mongodb d'origine, comme ceci:

collection = connection.get_collection(self._meta.db_table) 
self._mongo_data = collection.find_one({'_id': ObjectId(self.pk)}) 

Il fonctionne très bien, mais il est pas efficace parce que c'est la deuxième fois que cette requête est exécutée (d'abord pour la création du modèle et plus tard pour obtenir les données originales de mongodb).

Existe-t-il un moyen d'accéder aux données d'origine, récupérées pour la création du modèle?

La définition de ces champs supplémentaires sur le modèle n'est pas une option, car des données supplémentaires sont créées à la volée.

Répondre

1

Je ne pense pas qu'il existe un bon moyen de le faire.

Les champs sélectionnés sont limités au moment de la requête aux champs du modèle:

https://github.com/django-nonrel/mongodb-engine/blob/master/django_mongodb_engine/compiler.py#L123

https://github.com/django/django/blob/master/django/db/models/sql/query.py#L1638

Pouvez-vous utiliser un objet champ dict/embarqué et ont une sorte d'espace de noms de niveau du document pour les prendre?

+0

Merci pour votre aide! J'ai découvert que je peux ajouter les données mongo supplémentaires au jeu de résultats, malheureusement ces données supplémentaires sont perdues une fois le modèle créé: https://github.com/django/django/blob/master/django/db/models/ query.py # L298 – Willian

+1

Je pense que votre meilleur pari est de prendre les données supplémentaires et de les intégrer en utilisant un document incorporé ou un champ dict. – gone

1

S'il existe un moyen de le faire en utilisant une base de données SQL et qu'il ne fonctionne pas avec MongoDB Engine, veuillez ouvrir un rapport de bogue. Sinon, je crains que vous n'ayez besoin de cette fonctionnalité dans Django d'abord :-)

Questions connexes