Если вам нужен метод all
, вы должны вернуть понимание списка вместо генератора:
return [x.category for x in self.postcategory_set]
но так как postcategory_set
уже итеративен (потому что вы повторяли его)
return self.postcategory_set
было бы более естественным, но это дало бы вызывающей стороне ссылку на ваши личные изменяемые данные, за исключением того, что в этом случае Post.postcategory_set
- это на самом деле не set
тип , а скорее экземпляр google.app.engine.ext.db.Query
, который действительно повторяемый, но не изменяемый.
И вы не спрашивали, но ваша модель забавная, с таблицей PostCategory, которая может быть ненужной, когда вы могли бы иметь:
class Post(db.Model):
title = db.StringProperty(required=True)
category = db.ReferenceProperty(Category)
def categories(self):
return list(self.postcategory_set)
И падение PostCategory
полностью.