我的问题和标题一样;
为什么Django创建者将模型和查询集分开?
在编写Django代码时,我总是觉得两者都扮演着非常相似的角色,因为它们都用于数据库管理。另外,尽管模型本身没有实际数据,但尽管它是python和数据库之间的接口,但将它们传递给queryset还是有点尴尬。
Django创建者或合作者将同一角色除以两个原因是否存在任何原因?
答案 0 :(得分:2)
在面向对象的意义上,它们是两个完全不同的事物:
Model
实例是一个对象,可以表示您希望其表示的任何内容,例如汽车,地址或人,并且其某些属性存储在数据库中(它可以包括不包含以下内容的属性:甚至来自数据库)。QuerySet
是一个延迟的数据库查询,可以返回一个或多个数据库行。在评估QuerySet
时,您实际上是实例化模型并用数据填充它们。请注意,用MVC术语来说,Django模型就是MVC的模型。您还可以拥有自己的模型,甚至不继承django.db.models.Model
的子模型,例如如果您是从API或仅存在于当前会话中而不是永久存储在数据库中的模型中获取数据的话。