我想创建一个不映射到数据库表的模型.而是作为
python对象保留在内存中.
实际上,该模型应该表示来自许多其他表映射模型的标准化数据.
其他模型存储可在一天内多次编辑的数据.由于这些多次编辑,我不希望执行规范化/计算的表映射模型并将它们存储在数据库中,因为这些存储的数据可能会立即过时.
每次访问此规范化模型(通过管理员),我希望它从头开始对其他模型的数据执行规范化(这样它可以显示最新的数据),并且行为就像管理员下的正常模型一样比如显示列表视图和每行的详细视图.
按照Shintoist的回答编辑:
@Shintoist感谢清理事务并提供可用的方法.我刚刚实现了它,但最后还是打了一堵小墙:)
@skirmantas:是的,计算是在一个单独的对象中.此对象将传递到自定义视图中.
问题:一个问题是在admin.py下,我为这个对象创建了一个modeladminclass(它没有继承models.Model),所以我的自定义视图可以覆盖changelist视图和changeview.
然后我使用admin.site.register()来注册这个类似模型的类和modeladmin.但是,由于此模型根本不是django模型(因为它是内存中的独立python对象),admin.site.register()会抛出“’type’对象不可迭代”错误.我不想使用url.py而不是admin.py,因为它意味着前端,而我试图覆盖后端管理员.
解决方法
如何使用多个数据库,并将其中一个配置为使用内存表?
对于MySQL,它看起来像这样:
DATABASES = { 'default': { },'memory': { 'ENGINE': 'django.db.backends.MysqL','NAME': 'dbname','USER': 'dbuser','PASSWORD': '','HOST': 'localhost','PORT': '','OPTIONS': {"init_command": "SET storage_engine=MEMORY"} } }
请注意,在创建表时只需要使用SET storage_engine,但它可能不会为您的用例添加太多开销.
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html