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")
开发者_如何学JAVA
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 ?
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
精彩评论