使用此模型属性减少数据库负载
我的模型中有以下代码,用于确定 Entry
是否可计费:
class Entry(models.Model):
[ .. ]
@property
def is_billable(self):
return self.tags.filter(billable=False).count() == 0
Entry 有一个 FK to Project。在确定 Project
的剩余预算时,我循环遍历所有条目,并检查 is_billable
是否返回 True:
@property
def remaining_budget(self):
[ .. ]
for entry in self.entry_set.all():
if entry.is_billable:
remaining_budget -= entry.minutes
这对于数据库来说有点繁重,因为它会对每个条目触发一个查询。我正在寻找一种优化方法,欢迎提供提示和提示。
I have the following code in my model, which determines if an Entry
is billable:
class Entry(models.Model):
[ .. ]
@property
def is_billable(self):
return self.tags.filter(billable=False).count() == 0
Entry has an FK to Project. When determining the remaining budget on a Project
, I loop through all the entries, and check if is_billable
returns True:
@property
def remaining_budget(self):
[ .. ]
for entry in self.entry_set.all():
if entry.is_billable:
remaining_budget -= entry.minutes
Which is kind of heavy for the database, because it'll fire a query for each Entry. I'm looking for a way to optimize this, tips and hints are welcome.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您需要摆脱计数查询,那么为什么不:
Entry
模型添加一个is_billable
字段,is_billable == True
的新标签,则将其设置为 True / 如果删除了标签并且没有保留is_billable == True
的标签,则将其设置为 True它是假的,等等)的当然,如果您的数据可以通过其他应用程序或手动更改,则不应首选此方法。
If you need to get rid of the count query then why not:
is_billable
field to yourEntry
modelis_billable == True
is added, then set it True / if a tag is removed and no tags withis_billable == True
remain, then set it False, etc)Of course if your data can be changed through other apps or manually, this method should not be preferred.