开发者

Google App Engine - Datastore - GQL Query

开发者 https://www.devze.com 2023-03-20 12:39 出处:网络
class ProjectCategory(db.Model): name = db.StringProperty(\"Category name\", required = True) def __str__(self):
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 
0

精彩评论

暂无评论...
验证码 换一张
取 消