0

私は google-app-engine webapp を使用しています。コードの一部は次のとおりです。

class Post(db.Model):
    title = db.StringProperty(required=True)
    def categories(self):
        return (x.category for x in self.postcategory_set)

class Category(db.Model):
    name = db.StringProperty()

class PostCategory(db.Model):
    post = db.ReferenceProperty(Post)
    category = db.ReferenceProperty(Category)


class sss(webapp.RequestHandler):
  def get(self):
    obj1 = Post(title='hhaa')
    #obj1.title = 'haha'
    obj1.put()

    obj2 = Category()

    obj2.name='haha-kao'

    obj2.put()
    obj3=PostCategory()
    obj3.post=obj1
    obj3.category=obj2
    obj3.put()
    self.response.out.write(obj1.categories().get().name)

しかし、私はエラーが発生します:

Traceback (most recent call last):
  File "D:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 511, in __call__
    handler.get(*groups)
  File "D:\zjm_code\helloworld\a.py", line 131, in get
    self.response.out.write(obj1.categories().get().name)
AttributeError: 'generator' object has no attribute 'get'

では、私が書いた genexp のすべての値を取得するにはどうすればよいでしょうか?

4

2 に答える 2

1

それはcategories().next()あなたが必要とすることです。ジェネレーターにはget.

于 2010-05-11T03:13:04.137 に答える
1

メソッドが必要な場合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完全に落とします。

于 2010-05-11T07:58:26.947 に答える