【问题标题】:Reduce database load with this model property使用此模型属性减少数据库负载
【发布时间】:2011-05-28 20:34:07
【问题描述】:

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

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

Entry 对 Project 有一个 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

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

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    如果您需要摆脱计数查询,那何乐而不为:

    1. is_billable 字段添加到您的Entry 模型中
    2. 根据标签对象写入信号以将此字段设置为 True 或 False(如果添加了带有 is_billable == True 的新标签,则将其设置为 True / 如果删除了标签并且没有带有 is_billable == True 的标签,则将其设置为 False 等)

    当然,如果你的数据可以通过其他应用或手动更改,则不应该首选这种方法。

    【讨论】:

    • 这是我已经考虑过的事情,但我想知道是否有更好的方法来解决这个问题。谢谢:)。
    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多