django values(*field) 使用

这个方法返回的是ValuesQuerySet,是QuerySet 的子类,也就是说,你可以用QuerySet里的方法。 需要注意的是,返回的不是list,不要直接当list来用了。对ValuesQuerySet遍历,每一个元素是“字典”dict。

当不传入参数时,返回这个model的所有字段


AppDef.objects.values() [{‘creator‘: u‘admin‘, ‘apptype_name‘: u‘uc3g‘, ‘apptype_chn_name‘: u‘3G\u95e8\u6237‘, ‘note‘: u‘‘, ...},...]

当传入参数时,只会列出你指定的参数


AppDef.objects.values(‘apptype_name‘) [{‘apptype_name‘: u‘uc3g‘},...]

也可以加上filter,filter在前或者后面都是一样的


AppDef.objects.filter(pk=1).values(‘apptype_name‘)AppDef.objects.values(‘apptype_name‘).filter(pk=1)

如果想把关联的字段也一起查出来OneToOneField, ForeignKey 和ManyToManyField 关系的都可以。
ManyToManyField 在Django1.3版本后才支持   LogTypeDef定义了一个app的ForeignKey


LogTypeDef.objects.filter(pk=6).values(‘pk‘, ‘app__apptype_name‘) [{‘pk‘: 6L, ‘app__apptype_name‘: u‘wapsearch‘}]

如果你只想拿到app_id,可以这样,下面三种方法都是一样的,只是返回的结果名字对应你的查询语句


LogTypeDef.objects.filter(pk=6).values(‘pk‘, ‘app_id‘) LogTypeDef.objects.filter(pk=6).values(‘pk‘, ‘app‘) LogTypeDef.objects.filter(pk=6).values(‘pk‘, ‘app__id‘)

注意在关联关系为多对多的时候,它只会帮你一条一条的列出来,而不会帮你合并为一个list。
例如会返回类型的结果:同一个pk并不会帮你合并app_id


[{pk: 6, app_id: 2}, {pk: 6, app_id: 3}]

2. 注意事项

当同时使用distinct()和values(),需要注意order_by() (或者默认 model ordering) ,会自动加入select 中作为distinct项,所以返回的结果你以为是重复的,其实是order by的字段没列出来。
如果在extra() 之后用values(),一定要把extra用到的字段也加进来;如果extra()在values()之后,extra的字段会自动加进select。

3. Values_list

和values一样,只是返回的不是字典而是元组。

时间: 2024-11-02 10:51:43

django values(*field) 使用的相关文章

django model field

model field 类型 1.AutoField 一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntegerField 64位整数, -9223372036854775808 到 9223372036854775807.默认的显示widget 是 TextInput. 3.BinaryField ( Django 1.6 版本新增 ) 存储二进制数据.不能使用 filter 函数获得 QuerySet 4.B

Django的Field(字段)

字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True. 2.models.CharField 字符串字段 必须 max_length 参数 3.models.BooleanField 布尔类型=tinyint(1) 不能为空,Blank=True 4.models.ComaSeparatedIntegerField 用逗号分割的数字=varcha

python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用. 本节的代码:(Django 1.6, Python 2.7 测试环境) 大

Django基础(一)

h1,h2,h3 { display: block } h1 { background-color: #e59373; text-align: center; color: black !important } h2 { background-color: #8aab30; width: 60% } h3 { background-color: #336699; color: white; width: 30% } 知识预览 一 Django基本命令 二 路由配置系统(URLconf) 三 编写

Django之ORM数据库

5.1 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3 <2> mysql 引擎名称:django.db.backends.mysql 2    mysql驱动程序 MySQLdb(mysql python) mysqlclient MySQL Py

Django(基础篇)

Gjango 解析 是一个可以使Web开发工作愉快并且高效的Web开发框架,使用Django,使你的能够一最小的代价创建和维护高质量的Web应用. Django相较与其他Web框架其优势:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 流程 Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持耦合关系,只是定义上有些许不同, Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模

Django model与数据库操作对应关系(转)

? Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manager为父类,定义自己的manager,增加表级方法: QuerySet是Manager的方法返回的,是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法. Model是一条记录的类,它的功能很强大,里面包含外键实体等,它的方法都是记录级方法(都是实例方

Python攻关之Django(一)

课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据库管理工具) 1 Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和

Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM

web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单的web框架: 因为我们不希望接触到TCP连接.HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务. 这个接口就是WSGI:Web Server Gateway Interface. #---------------------myweb.py-------