如何在gae db.Model类中调用函数

时间:2014-02-05 15:39:51

标签: python google-app-engine

我正在使用带有python 2.7的appengine 1.8

我有以下类型的对象:

class Person(db.Model):
  name = db.StringProperty()
  email = db.EmailProperty()

和这个人的照片:

class Photo(db.Model):
  image = db.BlobProperty()
  type = db.StringProperty()
  caption = db.TextProperty()
  person = db.ReferenceProperty(Person)

我想在Person类中有一个函数直接访问Person的照片,如下所示:

    class Person(db.Model):
     name = db.StringProperty()
     email = db.EmailProperty() 

     @property
     def photos(self):
       photos =  Photo.all().filter("person =", self._key)

然而这不起作用。我应该使用self._key还是有另一种方法来访问封闭实体的密钥?

感谢。

2 个答案:

答案 0 :(得分:1)

如果这是您的完整代码,您似乎实际上没有在photos方法中返回任何值。

表示,您实际上需要返回该值,而不是分配给名为photos的局部变量

(请忽略请求您使用classmethod的不准确的注释。这显然是错误的,因为您需要访问当前键值,因此它是一个实例方法,而不是类方法。)

答案 1 :(得分:1)

一个例子:

class Photo(db.Model):
    image = db.BlobProperty()
    type = db.StringProperty()
    caption = db.TextProperty()
    person = db.ReferenceProperty(Person)

    @classmethod
    photos_of_person(cls, person_key):

        return cls.all().filter("person =", person_key)

class Person(db.Model):
    name = db.StringProperty()
    email = db.EmailProperty() 

    def person_photos(self):

        return Photo.photos_of_person(self.key())