2011-07-13 3 views
2
class ProjectCategory(db.Model): 
    name = db.StringProperty("Category name", required = True) 

    def __str__(self): 
     return str(self.name) 

class Project(db.Model): 
    name = db.StringProperty("Name", required = True) 
    category = db.ReferenceProperty(ProjectCategory) 
    description = db.TextProperty("Description", required = True) 
    #file_name = db.StringProperty("File name", required = True) 
    file = db.BlobProperty("Image") 

    whenstarted = db.DateTimeProperty("Start time") 
    whenended = db.DateTimeProperty("End Time") 

    def __str__(self): 
     return str(self.title) 

Comment obtenir tous les projets où la catégorie est CatNameGoogle App Engine - Datastore - GQL Recherche

hmm

db.GqlQuery("SELECT * FROM Project WHERE category = :1", "CatName") 

ne fonctionnent pas?

Répondre

4

La requête ne fonctionne pas car vous transmettez une chaîne "CatName" au lieu d'une clé d'instance ProjectCategory.

Récupérer votre choix ProjectCategory entité de Datastore d'abord avec:

pjc = GqlQuery("SELECT * FROM ProjectCategory WHERE name = :1", "CatName").get() 

utiliser ensuite comme paramètre dans la requête comme ceci:

db.GqlQuery("SELECT * FROM Project WHERE category = :1", pjc.key()) 

Une deuxième approche consiste à utiliser l'implicite modelname_set Propriété de l'ProjectCategory exemple:

pjc = GqlQuery("SELECT * FROM ProjectCategory WHERE name = :1", "CatName").get() 

pjc.project_set.fetch(10) #should contains some CatName projects 
+0

merci, après votre modification, cela fonctionne très bien. –

Questions connexes