django - Django如何避免再次访问数据库
问题描述
在模板上调用模型函数时是否可以避免命中数据库?
在我看来:
class ContractListView(FilterView):
model = Contract
paginate_by = 100
def get_queryset(self):
qs = Contract.objects.prefetch_related('payments')
return qs
在我的模板中,我调用了 Contract 模型的函数payment_status
。
模型:
class Contract(models.Model):
...
@property
def payment_status(self):
...
payments = self.payments.values_list('payment_date', flat=True) # it is hitting database again
return True if first in payments else False
当我看到debug_toolbar
prefetch_related 中的 sql 查询工作正常但每一行都再次重复查询时。如何解决这个问题?
解决方案
你可以试试这个-
payments = [payment_obj.payment_date for payment_obj in self.payments.all()]
推荐阅读
- typescript - TS - class method is undefined in callback
- ruby-on-rails - Devise issue with LDAP Auth in Prod Only
- python - 如何删除为菜单打开单独窗口的选项?
- javascript - 了解 Vue 中的 panzoom
- java - In Hibernate/JPA how to tell if the ConstraintViolationException is a PK, a FK, or a unique key violation?
- java - 如何在 Firebase 数据库 Android 的子列表中搜索?
- c - Semantic versioning: minor or major change?
- python - Anchor 的值在 tkinter,python3.7 中看起来颠倒了
- html - 滚动卡在 iOS 上
- python - 在 Zapier 中使用 Python 获取图像