python - 如何为ReferenceProperty预加载模型?

标签 python google-app-engine

我在不同的文件中有一个模型(blog/models.py、forum/models.py、article/models.py)。在每个文件中,我都定义了带有应用程序前缀的模型类(BlobPost、BlogTag、ForumPost、ForumThread、Article、ArticleCategory)。

我还有应用程序 - 注释,用于添加附加到任何模型对象的注释。例如,我想评论 BlogPost,或者添加引用 ForumPost 的评论。为此,我使用 ReferenceProperty() 类型的属性 - 不指定引用类型。任何模型都可以附加到评论中。

有什么问题吗?如果我在管理部分显示了所有注释,我会发现 ReferenceProperty 的自动加载模型存在问题。我不知道当前评论使用什么类型的模型。如果需要的话,我需要自动加载带有模型的包。

是的,存在简单的解决方案 - 包括所有应用程序的所有模型。但是,这不是一个好的解决方案。我只需要加载需要模型。如何进行自动加载?

我的想法是基于检测类型的属性,并通过该名称的第一部分检测应用程序名称以加载该应用程序中的所有模型。例如,我有引用 BlogPost 模型的评论。我获取应用程序的名称 - Blog 并从 blog.models import * 加载所有模型

为了实现我的想法,我需要了解 - 如何拦截创建属性实例。就我而言,如果我循环评论,我会看到 App Engine 自动(谢谢,但在我的情况下)为属性创建实例。

如何在创建属性实例之前注入(inject)加载模型的逻辑?

谢谢!

最佳答案

这在标准数据库框架中是不可能的,因为没有足够的信息来查找您的模型。框架必须使用的唯一信息是种类名称,它不包括完全限定的包 - 因此它无法确定您的模型定义可能位于哪个包中。

不过,如果您正在编写管理界面,则可能需要使用低级 google.appengine.api.datastore 界面,该界面对字典而不是模型类进行操作,并且不需要模型定义。

关于python - 如何为ReferenceProperty预加载模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247971/

相关文章:

python - 如何从python中的字典数据中删除unicode字符

python - Google 电子钱包服务器是否会对每次订阅续订进行回调?

python - 应用引擎 : Calculating the dimensions of thumbnails to be generated by serving thumbnails from the blobstore

java - GAE,可以持久化但无法加载(createQuery)实体

java - Google App Engine 祖先查询

eclipse - 使用谷歌应用引擎时,更改不会反射(reflect)在本地主机中

python - 从 Pandas 数据框中选择某些日期

python - json.loads() 是否容易受到任意代码执行的影响?

Python:使用 ascii 码打印

javascript - AppEngine API 客户端身份验证在更新后停止工作