Google App Engine - хранилище данных - GQL-запрос - PullRequest
2 голосов
/ 13 июля 2011
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")

не работают?

1 Ответ

4 голосов
/ 13 июля 2011

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

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

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 
...