基于Python的Google应用引擎循环模型依赖

2024-04-26 07:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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)

这不起作用,因为我在Post类中使用了Topic。我读了this solution并解决了循环依赖问题。生成的模块如下:

^{pr2}$

但是现在我有另一个问题。appengine创建Post表,但它没有topic列。我怎样才能解决这个问题?在


Tags: 模块fromdefaultdbtopicmodelcountpost
1条回答
网友
1楼 · 发布于 2024-04-26 07:48:15

这种方法不能正常工作,因为db.Model有一个元类,在创建类时,它对db属性列表进行初始化。由于您的属性当时不在那里,因此将不会对其应用必要的初始化。在

您可能需要考虑切换到NDB,后者通过对其中一个键属性使用字符串名称来支持循环引用。在

相关问题 更多 >