2

次のpythonモジュールがあります:

from google.appengine.ext import db
from user import User

class Post(db.Model):
    content = db.TextProperty()
    time = db.DateTimeProperty(auto_now_add=True)
    user = db.ReferenceProperty(User)
    topic = db.ReferenceProperty(Topic)

class Forum(db.Model):
    parent_ = db.SelfReferenceProperty()
    name = db.StringProperty()
    description = db.StringProperty()
    topics_count = db.IntegerProperty(default=0)
    posts_count = db.IntegerProperty(default=0)
    last_post = db.ReferenceProperty(Post)


class Topic(db.Model):
    forum = db.ReferenceProperty(Forum)
    title = db.StringProperty()
    replies_count = db.IntegerProperty(default=0)
    views = db.IntegerProperty(default=0)
    time = db.DateTimeProperty(auto_now_add=True)
    user = db.ReferenceProperty(User)
    last_post = db.ReferenceProperty(Post)

クラスで使用Topicしているため、これは機能しません。この解決策Postを読んで、循環依存の問題を解決しました。結果のモジュールは次のとおりです。

from google.appengine.ext import db
from user import User

class Post(db.Model):
    content = db.TextProperty()
    time = db.DateTimeProperty(auto_now_add=True)
    user = db.ReferenceProperty(User)


class Forum(db.Model):
    parent_ = db.SelfReferenceProperty()
    name = db.StringProperty()
    description = db.StringProperty()
    topics_count = db.IntegerProperty(default=0)
    posts_count = db.IntegerProperty(default=0)
    last_post = db.ReferenceProperty(Post)


class Topic(db.Model):
    forum = db.ReferenceProperty(Forum)
    title = db.StringProperty()
    replies_count = db.IntegerProperty(default=0)
    views = db.IntegerProperty(default=0)
    time = db.DateTimeProperty(auto_now_add=True)
    user = db.ReferenceProperty(User)
    last_post = db.ReferenceProperty(Post)


Post.topic = db.ReferenceProperty(Topic)

しかし今、私は別の問題を抱えています。App Engine はPostテーブルを作成しますが、トピック列がありません。どうすればこの問題を解決できますか?

4

1 に答える 1

2

db.Modelクラスの作成時にdbプロパティのリストで初期化作業を行うメタクラスがあるため、このアプローチは適切に機能しません。その時点ではプロパティが存在しなかったため、必要な初期化は適用されません。

キー プロパティの 1 つに文字列名を使用して循環参照をサポートする NDB への切り替えを検討することをお勧めします。

于 2012-10-29T15:09:06.007 に答える