我有一个模板视图 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')
答案 0 :(得分:1)
根据您从模板访问的字段,您可能会受益于对 ForeignKey 字段使用 select_related。
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#select-related