2013-09-07 2 views
1

Disons que j'ai ceci:Comment interroger un champ dans un ListField de EmbeddedModelField dans django-nonrel?

class Parent(models.Model): 
    id = models.IntegerField(primary_key=True) 
    children = ListField(EmbeddedModelField('Child')) 

class Child(models.Model): 
    id = models.IntegerField(primary_key=True) 

Dans le shell interactif mongo, trouver Parent avec un enfant en particulier est aussi facile que:

db.myapp_parent.find({'children.id': 123}) 

Comment cela se fait dans django-nonrel?

J'ai essayé quelques choses, y compris j'ai cherché des requêtes brutes mais raw_results n'est pas une méthode dans Parent.objects pour une raison quelconque.

FWIW, c'est ce que j'ai dans mon requirements.txt:

git+https://github.com/django-nonrel/[email protected] 
git+https://github.com/django-nonrel/[email protected] 
git+https://github.com/django-nonrel/[email protected] 

Répondre

4

Je pense avoir trouvé la réponse moi-même:

https://groups.google.com/forum/#!topic/django-non-relational/kCLOcI7nHS0

Fondamentalement, ressemble à ceci n'a pas encore été pris en charge .

La solution de contournement est donc des requêtes brutes.

Afin de faire des requêtes premières le code dans la question devrait être modifié:

from django_mongodb_engine.contrib import MongoDBManager 


class Parent(models.Model): 
    id = models.IntegerField(primary_key=True) 
    children = ListField(EmbeddedModelField('Child')) 

    objects = MongoDBManager() 


class Child(models.Model): 
    id = models.IntegerField(primary_key=True) 

Puis

Parent.objects.raw_query({'children.id': 123}) 

œuvres.

1

regarda autour pendant un certain temps et tout à coup la mentioned there suivante a fonctionné comme par magie pour moi, qui semble éviter la nécessité pour les requêtes brutes (adapté à votre exemple):

from django_mongodb_engine.query import A 

... 

Parent.objects.filter(children = A('id', '123')) 

En ce qui concerne les exigences:

git+https://github.com/django-nonrel/[email protected] 
git+https://github.com/django-nonrel/[email protected] 
git+https://github.com/django-nonrel/mongodb-engine 
#(django-mongodb-engine==0.6.0) 
#(pymongo==3.2) 
+0

où est la question ??? –

Questions connexes