如何为ReferenceProperty预加载模型?

时间:2010-07-14 15:48:14

标签: python google-app-engine

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

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

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

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

我的想法是基于检测类型的属性,并且通过此名称的第一部分检测应用程序名称以加载此应用程序中的所有模型。例如,我在参考BlogPost模型时发表了评论。我得到应用程序的名称 - 博客并从blog.models import *

加载所有模型

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

如果你正在编写管理界面,你可能想要使用低级google.appengine.api.datastore接口,而不是模型类,而不需要模型定义