python-Django ManyToMany模板渲染和性能问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Django ManyToMany模板渲染和性能问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1335字,纯文字阅读大概需要2分钟。
内容图文
![python-Django ManyToMany模板渲染和性能问题](/upload/InfoBanner/zyjiaocheng/670/6eccdb6d45274c07994ef6082b4066b0.jpg)
我有一个django模型,其中包含许多类型的关系,
class MyModel(models.Model):
name = ..
refby = models.ManyToManyField(MyModel2)
..
class MyModel2(..):
name = ..
date = ..
我需要在模板中渲染它,以便能够渲染所有引用mymodel的mymodel2对象.目前,我正在执行以下操作,
{% for i in mymodel_obj_list %}
{{i.name}}
{% for m in i.refby.all|dictsortreversed:"date"|slice:"3" %}
{{.. }}
{% endfor %}
<div> <!--This div toggles hidden/visible, shows next 12-->
{% for n in i.refby.all|dictsortreversed:"date"|slice:"3:15" %}
{{.. }}
{% endfor %}
</div>
{% endfor %}
如代码所示,我只想显示最新的3个mymodel2对象,它们按日期以相反的顺序排序,尽管接下来的12个确实要加载.
这是一种非常低效的方法吗? (鉴于refby.all的结果可能是几百个,“ mymodel_obj_list”中的结果总数也为100s-我在那里使用了分页器).
在这种情况下,最好的方法是预先计算这些refby并将它们呈现到模板中?我应该在视图中进行排序和计算,然后再通过它吗?我不确定如何保持分页.
查看代码看起来像这样,
obj_list = Table.objects.filter(..) # Few 100 records
pl = CustomPaginatorClass(obj_list...)
然后将pl作为mymodel_obj_list传递到页面.
谢谢!
解决方法:
我假设mymodel_obj_list是一个QuerySet.您正在循环中访问外键字段,这意味着,默认情况下,Django在访问对象时会一次查找每个对象的refby.如果要显示很多行,这将非常慢.
在QuerySet上调用select_related,以预先提取所有这些外键字段.
https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
内容总结
以上是互联网集市为您收集整理的python-Django ManyToMany模板渲染和性能问题全部内容,希望文章能够帮你解决python-Django ManyToMany模板渲染和性能问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。