在 Django 中,优化在__str__method中使用外键属性时的性能



DocumentDetail的str的实现方法的工作,但它减慢了一切通过运行一堆额外的查询,当我试图使用它的视图,表单等。有人知道怎么解决这个问题吗?

models.py

class Document(models.Model):
description = models.CharField(max_length=50)
def __str__(self):
return self.description
class DocumentDetail(models.Model):
document = models.ForeignKey(Document, on_delete=models.CASCADE)
detail = models.CharField(max_length=50)
def __str__(self):
return self.document.description

您应该用Document加载DocumentDetail。你可以用.select_related(…)[Django-doc] .

实际上,我们可以加载DocumentDetail,并将文档本身与DocumentDetail一起加载:

DocumentDetail.objects.select_related('document').get(pk=1)

这将创建一个LEFT OUTER JOIN,从而在同一个查询中同时加载DocumentDetailDocument

我们也可以获取所有DocumentDetails和相关的Documents:

DocumentDetail.objects.select_related('document')# all DocumentDetails

在视图/模型视图集等中,您需要在DocumentDetail上调用str(…),因此您应该重写查询以在相同的查询中加载相关的Document

最新更新