2014-02-05 2 views
1

Я использую AppEngine 1.8 с питоном 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, вам действительно нужно вернуть это значение.

(Просьба игнорировать неточные комментарии с запросом использовать classmethod Это, очевидно, неправильно, потому что вы должны получить доступ к текущему значению ключа, так что это метод экземпляра, а не classmethod.).

Смежные вопросы