首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么 Django 的 RelatedManager 不会在目标对象上缓存调用查找的对象?

Django的RelatedManager不会在目标对象上缓存调用查找的对象,这是为了保持数据的一致性和灵活性。

首先,RelatedManager是Django中用于处理关联关系的管理器对象。它允许我们在模型之间建立关联,并提供了一些方便的方法来进行关联对象的查询和操作。

在Django中,RelatedManager对象是惰性加载的,也就是说它只在需要时才会执行查询操作。这样可以避免不必要的数据库查询,提高性能。

另外,不在目标对象上缓存调用查找的对象还可以保持数据的一致性。假设目标对象上缓存了关联对象,而在数据库中的关联关系发生了变化(比如关联对象被删除),如果缓存的对象没有及时更新,就会导致数据不一致的问题。

此外,不缓存调用查找的对象还可以提供更大的灵活性。如果缓存了关联对象,那么每次查询都需要检查缓存是否过期,这会增加额外的复杂性和开销。而不缓存对象可以确保每次查询都是最新的结果,避免了缓存带来的潜在问题。

总结起来,Django的RelatedManager不会在目标对象上缓存调用查找的对象是为了保持数据的一致性和灵活性。这样的设计可以避免不必要的数据库查询,提高性能,并且确保每次查询都是最新的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django小技巧之html模板中调用对象属性或对象方法

url(r’^$’,views.index,name=’index’), ] 以上基本配置完成,下面演示在模板中调用对象方法: 定义模型类: 为了不用迁移,定义模型类要和test2数据库结构一样...–调用对象属性– {{hero.showname}}<!–调用对象方法,但不能给方法传递参数– <!...–注释 #点号解析顺序: #1.先把hero作为字典,hname为键查找 #2.再把hero作为对象,hname为属性或方法查找 #3.最后把hero作为列表,hname为索引查找 — <...pymysql pymysql.install_as_MySQLdb() 再次启动web服务成功;浏览器访问:http://192.168.255.70:8000/ 完成验收在html模板文件中调用对象属性和对象方法...模板变量如何传递给外部js调用方法小结 python Django模板使用方法 编写自定义Django模板加载器简单示例 python Django模板使用方法(图文)

3.3K21

创建子类对象时,父类构造函数中调用被子类重写方法为什么调用是子类方法?

public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...A对象时候父类会调用子类方法?...但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言是静态多分派,动态单分派。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

Django官方文档小结(一) -- Models模型

Django 关系字段 本文主要内容是关于Django框架中models知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) #2.4 数据库表示 在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column...#2.5 反向查找 (related_name) from django.db import models class Blog(models.Model): name = models.CharField...正向查找 (Entry->Blog) 由存放外键表(Entry)->查->被关联表(Blog) >>> e = models.Entry.objects.get(id=1) >>> e.blog .RelatedManager object at 0x10d58c908> >>> b.entryblogs.all() # 一对多,所以反向获取到数据是一个多条数据,需要all()

75920

django 1.8 官方文档翻译: 2-6-4 数据库访问优化

这篇文档剩下部分,着重于讲解如何以不做无用功方式使用Django。这篇文档也没有强调用在开销大操作其它优化技巧,像general purpose caching。...理解缓存属性 和整个QuerySet缓存相同,ORM对象属性结果中也存在缓存。通常来说,不可调用属性会被缓存。...{% if emails %}那一行调用了QuerySet.bool(),它导致user.emails.all()查询在数据库执行,并且至少在第一行以一个ORM对象形式返回。...但是要注意,这些批量更新方法不会在单独实例上面调用save()或者delete()方法,意思是任何你向这些方法添加自定义行为都不会被执行,包括由普通数据库对象信号驱动任何方法。...直接使用外键值 如果你仅仅需要外键当中一个值,要使用对象你已经取得外键值,而不是获取整个关联对象再得到它主键。

1.1K30

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...呢?

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...呢?...(); } } 由以上可知,由MyThread my1 = new MyThread(); 第一次调用无参构造时候,就会去父类thread 调用位无参构造,而父类无参构造是一系列init...() 方法,最终得到 Thread-0,启动线程后,再通过Thread类getName()方法得到线程对象名称。...同理,MyThread my2 = new MyThread(); 第二次调用无参构造时候,就会去父类thread 调用位无参构造,而父类无参构造是一系列init() 方法,最终得到 Thread...-1,启动线程后,再通过Thread类getName()方法得到线程对象名称。

78420

Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

新创建 QuerySet 缓存(cache)是空,QuerySet 第一次取值执行(evaluatad)时候进行数据库查询操作,Django 会将查询结果保存到 QuerySet cache...后续取值可以复用 QuerySet 缓存结果。 # 下面的这两行代码会走两次数据库操作,很可能他们两次得到数据是相同。 # 为什么我们不避免它呢?...,你可以用 表模型类 Manager 对象调用 .get() 方法,往里面传入查询条件来直接获取到数据对象。...(字段查询条件,双下划线查询) 此部分参考文档: django官网 字段查找(field-lookups) 字段查找(field-lookups)对应是 SQL 语句中 WHERE 条件,一般放在...自定义字段查找(custom field-lookups) 一般官方提供这些就已经完全够用了,真的要自定义了再去文档里看吧 单词 每个翻译文档后面都写出来,方便查看 后续再整合到一篇博客

2.9K20

django 1.8 官方文档翻译: 1-1-1 Django初探

本文档目标是给你描述足够技术细节能让你理解Django是如何工作,但是它并不表示是一个新手指南或参考目录 – 其实这些我们都有!...>>> r = Reporter(full_name='John Smith') # 将对象保存到数据库。你需要显示调用 save() 方法。...正则表达式通过圆括号来“捕获” URLs 中值。当一个用户请求一个页面时, Django 将按照顺序去匹配每一个模式,并停在第一个匹配请求 URL 。...{{ article.headline }} 表示 “输出 article headline 属性”。而点符号不仅用于表示属性查找,还可用于字典键值查找、索引查找和函数调用。...这仅仅是一点皮毛 这里只是简要概述了 Django 功能。以下是一些更有用功能: 一个 缓存框架 可以与 memcached 或其他后端缓存集成。

75520

Django设计哲学

Django 是完美主义者开发框架,和 Python 一样有着自己设计哲学: 一、总体架构方面: 1、松耦合 Django 基本目标是松耦合和高内聚。...6、一致性 Django框架应在所有级别保持风格一致,如从底层级 Python 代码,到高层继承及调用,每一个 Django 代源码,看起来都非常具有 Django 风格,这非常优雅,易于阅读和理解...这就是为什么在模型类中同时定义了模型所代表数据和有关该模型信息(其可读名称,默认排序等选项)原因;了解给定模型所需所有信息都应存储在模型中。...这就是开发人员需要 save() 显式调用原因,而不是框架无声地将事情隐藏在后台。...七、缓存框架方面 Django 缓存框架核心目标是: 1、更少代码 高速缓存应尽可能快。因此,围绕缓存后端所有框架代码都应保持绝对最小,尤其是对于 get() 操作而言。

2.1K10

史上最全 python常见面试题(一)

对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便。在后台for语句对容器对象调用iter()函数,iter()是python内置函数。...当变量被绑定在一个对象时候,该变量引用计数就是1,(还有另外一些情况也会导致变量引用计数增加),系统会自动维护这些标签,并定时扫描,当某标签引用计数变为0时候,该对就会被回收。...答:中间件是介于request与response处理之间一道处理过程,相对比较轻量级,并且在全局改变django输入与输出。 你对Django认识?...Django适用是中小型网站,或者是作为大型网站快速实现产品雏形工具。 Django模板设计哲学是彻底将代码、样式分离; Django从根本杜绝在模板中进行编码、处理数据可能。...Django 本身提供了 runserver,为什么不能用来部署?

1.5K10

后端框架学习-Django

简易图: 用户操作流程图: ---- MTV 模型 Django MTV 模式本质和 MVC 是一样,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django MTV 分别是指...b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。 视图函数把返回数据填充到模板中空格中,最后返回网页给用户。...1.单个数据删除 查找对应数据对象 调用该数据对象delete()方法实现删除 2.批量数据删除 查找QuerySet 调用delete()方法实现删除 3.伪删除操作 通过在表里添加一个布尔型字段...cache-page整体缓存自带强缓存功能 浏览器缓存策略-协商缓存缓存对象是一些静态文件、大图片等,考虑到这类资源比较费带宽且不易变化,强缓存到期后,浏览器会根服务器进行协商,当前缓存是否可用...= paginator.page(页码) page对象属性: object_list:当前页所有数据对象列表 number:当前页面的序号,从1开始 paginator:当前page对象相关Paginator

9.4K40

王老板Python面试(9):整理最全 python常见面试题(基本必考)

对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便。在后台for语句对容器对象调用iter()函数,iter()是python内置函数。...Django适用是中小型网站,或者是作为大型网站快速实现产品雏形工具。 Django模板设计哲学是彻底将代码、样式分离; Django从根本杜绝在模板中进行编码、处理数据可能。 7....10.Django 本身提供了 runserver,为什么不能用来部署?...比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL,因为登录页面有可能被浏览器缓存以及其他人查看浏览器历史记录原因,此时用户名和密码就很容易被他人拿到了。...2) 为什么选择redis数据库,因为redis支持主从同步,而且数据都是缓存在内存中,所以基于redis分布式爬虫,对请求和数据高频读取效率非常高。 2. 你用过爬虫框架或者模块有哪些?

1.6K10

Django框架理解和使用常见问题

中间件是介于request与response处理之间一道处理过程,相对比较轻量级,并且在全局改变django输入与输出。...Nginx中 HttpUwsgiModule作用是与uWSGI服务器进行交换,为什么有了uwsgi为什么还需要Nginx?...Django适用是中小型网站,或者是作为大型网站快速实现产品雏形工具。 Django模板设计哲学是彻底将代码、样式分离; Django 从根本杜绝在模板中进行编码、处理数据可能。...通过以模拟上千万用户实施并发负载及实时性能监测方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。...如果开启了这些缓存,任何一个由Django提供页面将会被缓存缓存时长在CACHE_MIDDLEWARE_SECONDS中配置定义。

1.3K20
领券