使用此模型属性减少数据库负载

时间:2011-05-28 20:34:07

标签: django django-models django-orm

我的模型中有以下代码,用于确定Entry是否可以计费:

class Entry(models.Model):
    [ .. ]
    @property
    def is_billable(self):
        return self.tags.filter(billable=False).count() == 0

条目有一个FK到项目。在确定Project上的剩余预算时,我会遍历所有条目,并检查is_billable是否返回True:

@property
def remaining_budget(self):
    [ .. ]
    for entry in self.entry_set.all():
        if entry.is_billable:
            remaining_budget -= entry.minutes

对于数据库来说,这有点沉重,因为它会为每个条目触发查询。我正在寻找一种优化方法,欢迎提示和提示。

1 个答案:

答案 0 :(得分:0)

如果您需要摆脱计数查询,那么为什么不:

  1. is_billable型号
  2. 中添加Entry字段
  3. 根据标记对象写入信号以将此字段设置为True或False(如果添加了带有is_billable == True的新标记,则将其设置为True /如果删除了标记且没有{{1}的标记}保留,然后将其设置为False等)
  4. 当然,如果您的数据可以通过其他应用程序或手动更改,则不应首选此方法。