Search code examples
google-app-enginegqlquery

Google App Engine - Datastore - GQL Query


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)

How to get all Projects where category is CatName

hmm

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

don't work ?


Solution

  • The query does not work because you are passing a "CatName" string instead of a ProjectCategory instance's key.

    Retrieve your desired ProjectCategory entity from Datastore first with:

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

    then use it as parameter in the query like this:

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

    A second approach is to use the implicit modelname_set Property of the ProjectCategory instance:

    pjc =  GqlQuery("SELECT * FROM ProjectCategory WHERE name = :1", "CatName").get()
    
    pjc.project_set.fetch(10) #should contains some CatName projects