【问题标题】:Django how to avoid hitting database againDjango如何避免再次访问数据库
【发布时间】:2020-06-14 15:49:05
【问题描述】:

在模板上调用Model的函数时是否可以避免撞到数据库?

在我看来:

class ContractListView(FilterView):
    model = Contract
    paginate_by = 100

    def get_queryset(self):
        qs = Contract.objects.prefetch_related('payments')
        return qs

在我的模板中,我正在调用合同模型的函数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 中看到 sql 查询时,prefetch_related 工作正常,但每一行都在重复查询。如何解决这个问题?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    你能试试这个吗-

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

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2017-09-05
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多