我有以下 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并解决了循环依赖问题。生成的模块如下:
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
表,但它没有主题列。我怎么解决这个问题?
最佳答案
这种方法将无法正常工作,因为db.Model
有一个元类,它在创建类时对数据库属性列表进行初始化工作。由于当时您的属性不存在,因此不会对其应用必要的初始化。
您可能需要考虑切换到 NDB,它通过使用关键属性之一的字符串名称来支持循环引用。
关于python - Python 中的 Google App Engine 循环模型依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103668/