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

详解python django面向关系数据库ORM对象映射系统(1)

例如: Article.objects.filter(title=’xxx’).filter(type=1).distinct() 同时,QuerySet对象还具有“懒执行”效果,只要没有真的使用查询出行中数据时...然而这却是行不通,因为: 1、空表没有一行数据,此时Model类没有实例,但却要有表结构,所以用户不能自己定义self下行中列成员; 2、Model类实例只表示一行,而“一行”是没有办法包含所有SQL...因此,由QuerySet实现几乎所有SQL操作方法是可行,且由于QuerySet对象表示若干行数据,SQL方法就可以被用户轻易理解为操作这些行数据,也容易实现,而Django也确实是这么干。...那么,当未执行过查询时,QuerySet对象还不存在,这些表方法如何提供给用户呢?...所以,虽然用户描述表Model类并没有使用元类,但仍然隐式得通过基类django.db.models.base.Model类使用了上面的ModelBase元类。

1.2K20

DjangoManager和QuerySet

models本身没有什么需要多说,Django 使用了一套直观系统:一个模型类代表一张数据表,一个模型类实例代表数据库表中一行记录。 模型类save方法可以插入,更新,删除数据。...要为指定类重命名 Manager,在该模型中定义一个类型为 models.Manager 属性。...QuerySet 类具有两个可用于自省公开属性: 可以返回QuerySet对象QuerySet方法 前文所述看起来做了3次SQL查询,实际上只有一次。...之所以能够实现这样操作,那是因为上述方法本身返回对象依旧是QuerySet对象,而非其它。...下面介绍一下常用可以返回QuerySet对象QuerySet方法 不能返回QuerySet对象QuerySet方法 下面介绍一些常用不能返回QuerySet对象QuerySet方法。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

people = models.Manager() 使用例子中模型, Person.objects会抛出AttributeError异常,而Person.people.all()会返回一个包含所有Person...例如,下面这个自定义 管理器提供了一个 with_counts() 方法,它返回所有 OpinionPoll 对象列表,而且列表中每个对象都多了一个名为 num_responses属性,这个属性保存一个聚合查询...你可以通过重写 Manager.get_queryset() 方法来覆盖 管理器自带 查询集。get_queryset() 会根据你所需要属性返回 查询集。...带queryset_only 属性,并且值为False方法总是被复制。 带 queryset_only 属性,并且值为True 方法不会被复制。...这是因为,管理器被设计用来封装对象集合管理逻辑。由于抽象对象中并没有一个集合,管理它们是毫无意义。如果你写了应用在抽象模型上功能,你应该把功能放到抽象模型静态方法,或者类方法中。

95520

Django之ORM对数据库操作

): 返回与所给筛选条件相匹配对象,返回结果有且只有一个,如果符合筛选条件对象超过一个或者没有都会抛出错误。... exclude(**kwargs): 它包含了与所给筛选条件不匹配对象 values(*field): 返回一个ValueQuerySet——一个特殊QuerySet... count(): 返回数据库中匹配查询(QuerySet)对象数量。...() 特殊QuerySet values() 返回一个可迭代字典序列 values_list() 返回一个可迭代元祖序列 返回具体对象 get() first() last() 返回布尔值方法有...所有提供给查询函数参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数前面。 例如:查询出版年份是2017或2018,书名中带物语所有书。

1.3K110

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

,下面的语句是更新一个 Entry 模型类实例化出来 entry 对象 blog 属性(请确保下面用到 Entry 和 Blog 实例化对象已经存在在数据库中,这样我们语句才能将它们查出来)...='Bar') # 表模型类实例化会返回实例化好对象 b.objects # 会报错 AttributeError: "Manager isn't accessible via Blog instances...QuerySet,他跟细分之前 QuerySet 没有绑定关系,互不影响。...记住这个 使用 .get() 和 .filter()[0] 有点不一样,如果没有满足条件查询结果, .get() 会报一个 DoesNotExist 错,这个报错是执行表模型类一个属性,所以,在上面的代码中...QuerySet 类有两个公共属性你可以用于反省?

2.9K20

rest_framework -- mi

这方法参数是什么,也就是get_queryset返回值    首先,断言self.queryset这个属性布尔值必须是True,不是的话便会抛异常,我们先看GenericAPIView类中有没有这个属性...(这并不是 属性查找顺序),我们可以找到queryset = None,这样的话,我们再写视图类的话(前提是继承了这个类),没有queryset这个属性或者值 为False,那么便会出错,所以queryset...,直接看paginate_queryset方法吧 self.paginator它是被装饰成属性方法,self.paginator它返回不是None就是一个对象(这个对象是进行分页),上面我们列举例子...视图类中并没有写pagination_class这个属性,那么就会去找到默认pagination_class,默认值为None,如果你再视图类中写了该属性, 值应该是是一个类,最后会返回这个类对象回去...self就是 当前视图类对象,它有kwargs这个属性

56720

Django-xadmin+rule对象级权限实现

基于对象权限控制(如:系统用户分为平台运营人员和商家用户,商家用户小A只能查看编辑所属商家记录,而管理员可以纵览全局) 3....数据库记录导入导出(xsl, json等),并且拥有对象权限控制(如:小A不能导出小B公司信息,更不能导入小B公司信息进行更新和新增) 1.2 现状 实现需求1:Django-admin...功能实现 本节主要展示对象级权限功能实现。django工程、xadmin替换原生admin设置,请参照官方文档。...%s' % (self.app_label, codename), obj) # 重写queryset()或者get_list_display(),list view权限也做到了对象级隔离...def queryset(self): qs = super(CustomerAdmin, self).queryset() if self.request.user.is_superuser

1.3K20

python mysql自增字段AUTO_INCREMENT值修改方式

这个时候我们就要学习去修改数据表一些属性值了,而这个属性值就是AUTO_INCREMENT。 首先我们要知道怎么查看这个属性值。...通过命令我们好像没找到这个AUTO_INCREMENT属性啊,why?这是因为我们刚建好表,还没有数据,所以这个属性还没开始被赋值。...可以发现表信息并没有因为表里信息被删除而改变,这样的话,我们要是想让添加数据id从2开始不就会不行了吗? but,我们可以修改表信息。...queryset = CompanyAuthRecord.objects.all() 最后发现原来把abstract = True注释掉就可以完美的解决这个问题,至于当初为什么会加这一属性,好像是在引入此...事实确实解决那个引入问题,然而当初并没有去研究为什么要用他,应了那句话:欠下,迟早要还!

2.7K10

ORM常用操作

get(**kwargs): 返回与所给筛选条件相匹配对象,返回结果有且只有一个,如果符合筛选条件对象超过一个或者没有都会抛出错误。... exclude(**kwargs): 它包含了与所给筛选条件不匹配对象 values(*field): 返回一个ValueQuerySet——一个特殊QuerySet... count(): 返回数据库中匹配查询(QuerySet)对象数量。...包含数据,就返回True,否则返回False View Code 示例: models.类名.objects.all() 返回QuerySet对象方法有 all() filter() exelude...所有提供给查询函数参数(关键字参数或Q 对象)都将”AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数前面。 例如:查询出版年份是2017或2018,书名中带物语所有书。

2K10

Django-xadmin+rule对象级权限实现方式

基于对象权限控制(如:系统用户分为平台运营人员和商家用户,商家用户小A只能查看编辑所属商家记录,而管理员可以纵览全局) 3....数据库记录导入导出(xsl, json等),并且拥有对象权限控制(如:小A不能导出小B公司信息,更不能导入小B公司信息进行更新和新增) 1.2 现状 实现需求1:Django-admin让我们能够很方便实现一个管理后台程序...功能实现 本节主要展示对象级权限功能实现。django工程、xadmin替换原生admin设置,请参照官方文档。...%s' % (self.app_label, codename), obj) # 重写queryset()或者get_list_display(),list view权限也做到了对象级隔离...补充知识:django 扩展自带权限,使其支持对象权限 扩展django 自带权限 说明 在不重写 自带权限基础上,完成支持对象权限,适用于小型项目。

92420

基于类通用视图:ListView 和 DetailView

在开发网站过程中,有一些视图函数虽然处理对象不同,但是其大致代码逻辑是一样。比如一个博客和一个论坛,通常其首页都是展示一系列文章列表或者帖子列表。...='index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...将 archives 视图函数改写成类视图 这里没有什么新东西要讲了,学以致用,这个任务就交给你自己了。...() # 视图必须返回一个 HttpResponse 对象 return response def get_object(self, queryset=None...总结 本章节代码位于:Step18: class based views。 如果遇到问题,请通过下面的方式寻求帮助。 在下方评论区留言。

2.6K70

Django学习笔记之Django ORM相关操作

get(**kwargs): 返回与所给筛选条件相匹配对象,返回结果有且只有一个,如果符合筛选条件对象超过一个或者没有都会抛出错误。... exclude(**kwargs): 它包含了与所给筛选条件不匹配对象 values(*field): 返回一个ValueQuerySet——一个特殊QuerySet... count(): 返回数据库中匹配查询(QuerySet)对象数量。...包含数据,就返回True,否则返回False 返回QuerySet对象方法有 all() filter() exclude() order_by() reverse() distinct() 特殊QuerySet...所有提供给查询函数参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数前面。 例如:查询出版年份是2017或2018,书名中带物语所有书。

3.5K40

Django(55)GenericAPIView源码分析

如果没什么逻辑,可以直接写在视图属性中,如果逻辑比较复杂,也可以重写get_queryset方法用来返回一个queryset对象。...如果重写了get_queryset,那么以后获取queryset时候就需要通过调用get_queryset方法。因为queryset 这个属性只会调用一次,以后所有的请求都是使用他缓存。...默认没有设置,跟lookup_field保持一致。 filter_backends 用于过滤查询集过滤器后端类列表。默认值与DEFAULT_FILTER_BACKENDS 设置值相同。...__name__ ) # 定义queryset属性,获取父类queryset,如果父类没有定义类属性`queryset`,那么默认值就是None,就会报上面断言错误...() # 返回动态数据集,默认返回全部 serializer = self.get_serializer(query, many=many) # 如果数据对象queryset对象

36210

地图相关 CoreLocation框架介绍请求用户授权方法CLLocationManager 属性和方法CLLocation 位置对象介绍三、地理编码实现

05′ ---- 1、如果定位方法不走原因: (1)没有配置 plist 键值 (2)模拟器 bug (3)没有使用 strong 属性 2、逻辑结构 ?...设置界面 plist添加用户提示信息可以不写值,表示空白提示,一般写上需要定位原因,提高用户打开几率 1....方法后,就开始不断地调用该代理方法定位用户位置,locations参数里面装着一组CLLocation对象,持续定位需要设置 distanceFilter 和 desiredAccuracy 属性 -...CLLocation用来表示某个位置地理信息,比如经纬度、海拔等等,创建一个 CLLocation对象只需要两个参数:纬度和经度 属性: (1)2D位置坐标,经纬度 @property(readonly...正地理编码:将地名转换成经纬度过程 步骤: (1)创建一个GLGeocoder对象 (2)实现地理编码方法 (3)遍历数组,获取数据(可能返回多个相同地名),如果对象大于1,应该给用户一个列表选择

1.8K120
领券