我有Django Model,它有两个属性:
class M(Model):
@property
def p1(self):
return process_result(SomeModel.objects.filter(val_gt=1))
@property
def p2(self):
return process_result(SomeModel.objects.filter(val_lt=1))
两者都在Django Admin list_lisplay = ('p1','p2',)
中使用
我想用1替换2个数据库查询,类似这样
class M(Model):
def some_hook(self):
res = SomeModel.objects.all()
self.p1 = process_result(filter(lambda l:l.val > 10, res))
self.p2 = process_result(filter(lambda l:l.val < 10, res))
PS:>10 or <10
的问题只是简化的一个例子,我只想找到一种方法,通过执行一个常见的数据库查询来定义多个属性
答案 0 :(得分:1)
您可以尝试在模型中缓存查询集结果:
class M(Model):
def get_some_model(self):
attr_name = '_some_model_cache'
if hasattr(self, attr_name):
return getattr(self, attr_name)
qs = SomeModel.objects.all()
setattr(self, attr_name, qs)
return qs
@property
def p1(self):
return process_result(filter(lambda l:l.val > 10, self.get_some_model()))
@property
def p2(self):
return process_result(filter(lambda l:l.val < 10, self.get_some_model()))