我的Django应用程序包含以下两个模型:
# Start file person.py
class Person(models.Model):
name = models.CharField(max_length=254,null=False, blank=False,)
@property
def things(self):
return self.Thing_created_by.all()
# End file person.py
以及
^{pr2}$我想编写分别名为CachedPerson
和CachedThing
)的包装类,作为这两个类的替换。CachedPerson
和{
其思想是调用CachedPerson.__init__(self, pk=3)
将从数据库中检索{CachedThing.__init__(self, pk=3)
也可以类似地工作。基本上,我复制ORM的副本并将它们存储在memcached中以提高性能。对ORM的所有读/写操作都将由这些包装类处理。在
为了说明这个概念,下面是我希望在memcached中,如果Person#3创建了Thing#4和Thing#5:
{
"Person_3": {
"name": "Person #3",
"things": [<CachedThing #4 Object>, <CachedThing #5 Object>],
},
"Thing_4": {
"name": "Thing #4",
"created_by": <CachedPerson #3 Object>,
},
"Thing_5": {
"name": "Thing #5",
"created_by": <CachedPerson #3 Object>,
},
}
但是,我正在努力编写CachedPerson.__init__()
,而不被CachedPerson和CachedThing之间的循环导入引用捕获。调用Person.object.get(pk=3).things()
返回Thing#4和Thing#5。{{cd11>但需要调用^ cdhings。这需要导入CachedThing,这将导致循环导入。那怎么办呢?在
我希望Django有一个中间件来为我管理这个复杂的ORM缓存任务。唉,据我所知还没有。从我看到的DjangoMemcached缓存为我呈现了HTML页面。那不是我需要的。我的整个Django应用程序是一系列restfulapi。我没有呈现任何HTML。我需要Django数据库模型保存在缓存中。其中有些非常复杂,访问和修改需要大量的数据库。在
可以在函数/方法内部导入:
但是我认为定制ModelManager对于这种任务是一个更好的选择。Google的“django缓存模型管理器”——有很多技巧和应用程序是为此而创建的。在
相关问题 更多 >
编程相关推荐