首页 > 解决方案 > 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_toolbarprefetch_related 中的 sql 查询工作正常但每一行都再次重复查询时。如何解决这个问题?

标签: djangodjango-models

解决方案


你可以试试这个-

payments = [payment_obj.payment_date for payment_obj in self.payments.all()]

推荐阅读