用户有企业。 用户对商家模型有FK。在调试工具栏中,通常所有商业 .id都在一个查询中被提取,但是当我尝试显示商家名称时,执行了数百个查询(每个查询一个用户< /强>)。
(*)我已从代码
中删除了所有不相关的原始数据用户
class Users(models.Model):
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
business = models.ForeignKey('Business', blank=True, null=True, related_name="users")
商家
class Business(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
views.py
class UserList(ListView):
queryset = Users.objects.annotate(num_assets=Count('assets', distinct=True),
num_tickets=Count('tickets'),
)
def get_context_data(self, **kwargs):
context = super(UserList, self).get_context_data(**kwargs)
return context
模板
{% for user in object_list %}
<tr>
<td>{{ user.id }}</td>
<td>
{{ user.business }}
</td>
</tr>
{% endfor %}
这是错误的,我正在尝试为它们运行一个查询。
答案 0 :(得分:2)
尝试使用select-related。我正在从文档中复制:
返回一个QuerySet,它将“跟随”外键关系,在执行查询时选择其他相关对象数据。这是一个性能提升器,它会导致单个更复杂的查询,但意味着以后使用外键关系不需要数据库查询。
所以你的查询集应该是这样的:
queryset = Users.objects.select_related('business ').annotate(num_assets=Count('assets',
distinct=True),
num_tickets=Count('tickets'),
)