django:为啥在模板中获取模型的 .id 字段很慢?

     2023-02-24     267

关键词:

【中文标题】django:为啥在模板中获取模型的 .id 字段很慢?【英文标题】:django: why is getting model's .id field in template slow?django:为什么在模板中获取模型的 .id 字段很慢? 【发布时间】:2011-11-18 03:18:50 【问题描述】:

我有一个模板,它最终会输出大约 700 个输入元素,如下所示:

<input class="ticket" size="3" maxlength="15" type="text" name=" ticket.id ">

连同调用视图函数和渲染模板(生成 HTML,但不计算浏览器渲染时间),大约需要 1.5 秒。我正在优化模板以查看花费时间最长的内容,因为还有很多其他更复杂的事情正在发生……我意识到如果我删除了 ticket.id 部分,渲染时间会下降到 ~0.48 秒。我什至在票模型上做了一个函数:

def get_input_name(self): return str(self.id)

并替换了模板中的行:

<input class="ticket" size="3" maxlength="15" type="text" name=" ticket.get_input_name ">

这产生了相同的输出,大约为 0.52 秒。

为什么调用 ticket.id 这么慢?

【问题讨论】:

可能是因为它进行了额外的 SQL 调用,虽然不太确定,但尝试使用类似 pypi.python.org/pypi/django-debug-toolbar-django13/0.8.4 的东西进行分析 您使用的是什么后端,您的票证模型中有多少行? @nicolas:postgresql,我的票证模型中有 10 个字段 @Claudiu:例如,您是否对 sqlite 有此问题? @nicoals:不确定,我只用 postgresql 试过 【参考方案1】:

尝试查看正在执行的 SQL 查询。从 shell (./manage.py shell) 试试这个:

from django.db import connection
from pprint import pprint
from django.http import HttpRequest
from myproject.myapp.views import myview
f = open('/tmp/queries.txt','w')
myview(HttpRequest(), whatever_other, args_you_need)
pprint(connection.queries, f)
f.close()

然后查看/tmp/queries.txt 并查看实际进行了哪些查询。每个查询也将有它花费的时间。如果您没有看到任何异常(例如每次通过模板循环的查询),那么您的问题可能不是数据库,我不知道。

【讨论】:

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

】如何从用户在django基本模板中创建的所有帖子中获取模型字段值的总和?【英文标题】:Howtogetthesumofamodelfieldvaluefromallthepostsausercreatedindjangobasetemplate?【发布时间】:2020-10-2514:05:04【问题描述】:我有一个auth_user模型和一个post... 查看详情

Django:在模板中组合变量和 HTML id

】Django:在模板中组合变量和HTMLid【英文标题】:Django:combinevariableandHTMLidintemplate【发布时间】:2017-04-0300:39:05【问题描述】:我正在寻找一种使用Javascript变量“连接”django对象列表(通过views.py中的get_queryset获取)的方法。然... 查看详情

如何从模板标签中的模型对象中获取 django 模型字段值

】如何从模板标签中的模型对象中获取django模型字段值【英文标题】:Howtogetdjangomodelsfieldvaluefrommodelobjectintemplatetags【发布时间】:2011-10-0709:20:53【问题描述】:Models.py:classDiscussion(models.Model):version=models.TextField(blank=True)team=model... 查看详情

Django模板:从模型查询集对象中提取字段

】Django模板:从模型查询集对象中提取字段【英文标题】:Djangotemplate:Extractfieldfrommodelquerysetobject【发布时间】:2016-12-1813:25:30【问题描述】:在Django模板中,我使用以下方法获取最新评论:blog.comments.all|dictsort:"created_at"|last其... 查看详情

在 Django 中,为啥模型中的 blank=True 不会使表单字段不是强制性的?

】在Django中,为啥模型中的blank=True不会使表单字段不是强制性的?【英文标题】:InDjango,whyblank=Trueinthemodelisnotmakingtheformfieldnotmandatory?在Django中,为什么模型中的blank=True不会使表单字段不是强制性的?【发布时间】:2020-05-2910:4... 查看详情

在 Django 模板中格式良好的缺失值的模型字段列表

】在Django模板中格式良好的缺失值的模型字段列表【英文标题】:ListofmodelfieldswithmissingvaluesnicelyformattedinDjangotemplate【发布时间】:2020-01-2121:48:51【问题描述】:我正在尝试在Django中创建一个视图,以列出模型中的每个条目以及... 查看详情

Django 1.6 无法在模板中显示来自模型的多对多字段

】Django1.6无法在模板中显示来自模型的多对多字段【英文标题】:Django1.6Cantdisplayamanytomanyfieldfrommodelsintemplate【发布时间】:2014-07-2821:12:05【问题描述】:我正在尝试在模板中显示来自医生模型的多对多字段。每个医生都有不止... 查看详情

在 Django 中获取模型的字段

】在Django中获取模型的字段【英文标题】:Getmodel\'sfieldsinDjango【发布时间】:2011-04-0813:10:13【问题描述】:给定一个Django模型,我试图列出它的所有字段。我已经看到了一些使用_meta模型属性执行此操作的示例,但是meta前面的... 查看详情

使用 Form 标签在 Django 模板中获取模型的名称

】使用Form标签在Django模板中获取模型的名称【英文标题】:GettingtheNameoftheModelinaDjangotemplateusingtheFormtag【发布时间】:2016-07-1617:56:10【问题描述】:我想在Django的通用表单模板中显示模型的名称。我考虑过通过表单模板标签访问... 查看详情

如何在模板django中获取类模型的名称

】如何在模板django中获取类模型的名称【英文标题】:Howtogetthenameofaclassmodelintemplatedjango【发布时间】:2018-03-1016:26:18【问题描述】:此问题与此问题(Modelnameofobjectsindjangotemplates)相似但不一样。我想知道如何获取Models类名(在本... 查看详情

Django模板按“不相关”模型的字段排序

】Django模板按“不相关”模型的字段排序【英文标题】:Djangotemplatesortby\'unrelated\'model\'sfield【发布时间】:2015-02-1810:20:28【问题描述】:我正在尝试通过模型中的一个字段对模板中的相关项目进行排序,这三个ForeignKey关系相距... 查看详情

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

django:自相关 ForeignKey 字段的相关名称不起作用 |在模板中获取相反方向的自引用

】django:自相关ForeignKey字段的相关名称不起作用|在模板中获取相反方向的自引用【英文标题】:django:related_nameofselfrelatedForeignKeyfieldnotworking|getoppositedirectionofselfreferenceintemplate【发布时间】:2022-01-0819:11:58【问题描述】:嘿嘿!... 查看详情

在 Django 模板中获取 Decimal 字段的整数部分

】在Django模板中获取Decimal字段的整数部分【英文标题】:GettheintegerpartofaDecimalfieldinaDjangotemplate【发布时间】:2012-02-1318:25:35【问题描述】:我的问题很简单,但我找不到答案。如果之前已经回答过,我很抱歉。我有一个DecimalFie... 查看详情

为啥 Django 模板不能从对象字段中识别列表?

】为啥Django模板不能从对象字段中识别列表?【英文标题】:Whywon\'tDjangotemplaterecognizelistfromobjectfield?为什么Django模板不能从对象字段中识别列表?【发布时间】:2019-11-0709:49:21【问题描述】:我有一个存储列表的对象字段。Djang... 查看详情