Google App Engine - хранилище данных - запрос GQL

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)

Как получить все проекты с категорией CatName

Хм

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

не работает?


person Kubas    schedule 13.07.2011    source источник


Ответы (1)


Запрос не работает, потому что вы передаете строку "CatName" вместо ключа экземпляра ProjectCategory.

Сначала получите желаемую ProjectCategory сущность из Datastore с помощью:

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

затем используйте его как параметр в запросе следующим образом:

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

Второй подход - использовать неявное свойство modelname_set экземпляра ProjectCategory:

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

pjc.project_set.fetch(10) #should contains some CatName projects 
person systempuntoout    schedule 13.07.2011