2014-02-05 30 views
1

我使用AppEngine上1.8与Python内部函数2.7如何调用GAE db.Model类

,我有以下类型的对象:

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类里面的函数:

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

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

但是这是行不通的。我应该使用self._key或有另一种方式来访问的封闭实体的关键?

谢谢。

+1

你必须使用@classmethod – voscausa

+0

@voscausa废话,这与此无关。夸梅,究竟“不工作”是什么意思?怎么了?显示你如何调用这个,以及任何错误。 –

+0

我从Django视图像这样调用它:{{person.photos}}和我越来越即使有值没有结果。 logging.debug(person.photos())也不起作用 – Kwame

回答

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()) 
+0

没有必要的一类方法。照片应该读取'return self.all()。filter(“person =”,self.key())'。虽然这会返回查询而不是照片。 –

1

如果这是你完整的代码,你似乎并没有成为真正返回照片中的方法的任何值。而不是分配给名为photos一个局部变量,你真正需要返回值。

(请忽略不正确的意见,要求你使用一个类方法这显然是错误的,因为你需要访问当前关键值,所以它是一个实例方法,而不是一类方法。)