python - django tmeplate 视图加载缓慢
问题描述
我有一个temrinal management
包含 2 个表单和 2 个查询集的模板视图,我没有做任何排序的东西,只是一种过滤方法。我不知道为什么页面变慢,会因为互联网连接而发生吗?我正在使用位于单独服务器上的 mysql 数据库。
class TerminalManagementView(LoginRequiredMixin, TemplateView):
template_name = "app/terminal_management.html"
def post(request):
pass
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tb_terminal_categories'] = TbTerminalCategory.objects.all()
context['tb_terminal_caregory_form'] = TbTerminalCategoryForm()
context['tb_terminal_register_form'] = TbTerminalRegisterForm()
filter = self.request.GET.get('category')
if filter:
terminals = TbTerminal.objects.all().filter(category__category_name=filter)
else:
terminals = TbTerminal.objects.all()
page = self.request.GET.get('page', 1)
paginator = Paginator(terminals, 9)
try:
data = paginator.page(page)
except PageNotAnInteger:
data = paginator.page(1)
except EmptyPage:
data = paginator.page(paginator.num_pages)
context['terminals'] = data
return context
class TbTerminal(models.Model):
id = models.CharField(primary_key=True, max_length=32,
default=generate_uuid)
customer = models.ForeignKey(
TbCustomer, on_delete=models.CASCADE, db_column='cstm_id')
terminal_id = models.CharField(max_length=64, blank=True, null=True)
area = models.ForeignKey(
TbArea, on_delete=models.CASCADE, db_column='extra_id1')
room = models.ForeignKey(
TbRoom, on_delete=models.CASCADE, db_column='extra_id2')
category = models.ForeignKey(
TbTerminalCategory, on_delete=models.CASCADE, db_column='cat_id')
firmware_version = models.CharField(max_length=255, blank=True, null=True)
total_space = models.BigIntegerField(blank=True, null=True)
free_space = models.BigIntegerField(blank=True, null=True)
program_version = models.CharField(max_length=255, blank=True, null=True)
device_model = models.ForeignKey(
TbDeviceModel, on_delete=models.CASCADE, db_column='device_model_id')
解决方案
根据您从模板访问的字段,您可能会受益于在 ForeignKey 字段上使用select_related 。
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#select-related
推荐阅读
- node.js - NodeJS:您使用的是 node 的预发布版本,可能无法按预期工作
- python - 在进程之间传递变量的简单方法?
- rest - Zxing 和 Xamarin 形式
- elasticsearch - 无法启动kibana
- flutter - sliverAppBar 的圆底
- node.js - 如何使用 docker 容器在两个不同的端口上启动同一个 docker 容器?
- python - 如何检查一列的每个值是否映射到另一列中的一个值?
- data-structures - 如何防止 Nil 将容器恢复为其默认值?
- axios - 对话流代码未将数据发布到 Google 电子表格。Firebox 中没有记录错误
- javascript - 执行特定功能后加载脚本