python - Python 中的 Google App Engine 循环模型依赖项

标签 python google-app-engine google-cloud-datastore

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

相关文章:

Python 图像库 : How to combine 4 images into a 2 x 2 grid?

java - 部署时出现 GAE 端点错误 500

python - 泡沫:谷歌应用引擎支持

python - Google App Engine 数据库查询内存使用情况

java - 按索引查询 GAE 数据存储区

python - 为什么更新优化器会产生不好的结果?

python , conda : ERROR: Could not install packages due to an OSError: [WinError 5] Access is denied: 'd:\\anaconda3\\envs\\python39\\scripts\\pip.exe'

google-app-engine - 将 Google Cloud KMS 与 Flask、gunicorn 和 gevent worker 一起使用时出错 : "google.api_core.exceptions.ServiceUnavailable: 503 Deadline Exceeded"

google-app-engine - 如何删除 Google App Engine 中的所有数据存储区?

python - 尝试使用 django-subdomains 在我的 django urlpatterns 中查找循环引用?