【发布时间】:2011-05-07 21:09:11
【问题描述】:
我想创建一个不映射到数据库表的模型。相反,作为 python 对象保留在内存中。
实际上,该模型应该表示来自许多其他表映射模型的规范化数据。
其他模型存储可以在一天内多次编辑的数据。由于这些多次编辑,我不想要一个执行规范化/计算并将它们存储在数据库中的表映射模型,因为这些存储的数据可能会立即过时。
每次访问这个规范化模型时(通过管理员),我希望它从头开始对来自其他模型的数据执行规范化(以便它可以显示最新数据)并且表现得像一个普通模型会在管理员下显示列表视图和每一行的详细视图。
在神道教的回答后编辑:
@Shintoist 感谢您清理并提供可用的方法。我刚刚实现了它,但最后撞到了一堵小墙:)
@skirmantas:是的,计算在一个单独的对象中。该对象正在传递到自定义视图中。
问题:一个问题是,在 admin.py 下,我为这个对象创建了一个 modeladminclass(它不继承 models.Model),因此我的自定义视图可以覆盖更改列表视图和更改视图。 然后我使用 admin.site.register() 来注册这个类模型类和模型管理员。但是,由于这个模型根本不是 django 模型(因为它是内存中的独立 python 对象) admin.site.register() 抛出“'type' object is not iterable”错误。我不想使用 url.py 而不是 admin.py,因为它是用于前端的,而我试图覆盖后端管理员。
【问题讨论】:
-
我了解您想要使用管理员,但根据您的需要,这是一种非常全面的方式。难道你不能用页面某处的链接覆盖管理模板,该链接指向使用你编写的视图的 url?这样它就会“进入”管理员。 Django 会自动寻找覆盖内置插件的模板。否则,我建议您使用 Tomasz Zielinski 的解决方案。
-
@tomas。如果我创建规范化模型以映射到内存中的表,它是否仍然是静态的。我的意思是,模型在打开时会从其他模型中获取最新数据,规范化/处理该数据并显示一个列表。与此同时,如果有人编辑了其他模型,在服务器重新启动(这将重新加载内存表)之前,这些模型不会显示在规范化模型中。
-
我还想补充一点,我的 django 实现已经使用了三个数据库,一个包含遗留数据(以便我可以将其迁移到新系统),一个用于通过夹具运行测试的 SQLlite,第三个,主数据库。这也意味着,我将仅为一个模型添加第四个数据库。
-
为什么你甚至想用 admin.site.register 注册一些不是 django 模型的类?制作你的视图和你自己的表单来做你需要的东西。
标签: database django mapping models