在一次调用中计算多个模型属性

时间:2017-09-15 06:42:39

标签: django django-models django-admin

我有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的问题只是简化的一个例子,我只想找到一种方法,通过执行一个常见的数据库查询来定义多个属性

1 个答案:

答案 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()))