第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者、&并且
F()可以将数据库里的数字类型的数据,转换为可以数字类型
首先要导入 from django.db.models import F
from django.shortcuts import render
from app1.models import * #导入数据库操作模块 from django.db.models import F #导入F类 #逻辑处理模块
def special(request):
#获取yu_wen_lao_shi表里id等于1的那条数据,将shuzi字段的值自身加100
yu_wen_lao_shi.objects.filter(id=1).update(shuzi=F('shuzi') + 100) return render(request,'index.html',locals()) #打开页面
Q()运算符:|或者、&并且
# Q
#
# 方式一:
# Q(nid__gt=10)
# Q(nid=8) | Q(nid__gt=10)
# Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root')
# 方式二:
# con = Q()
# q1 = Q()
# q1.connector = 'OR'
# q1.children.append(('id', 1))
# q1.children.append(('id', 10))
# q1.children.append(('id', 9))
# q2 = Q()
# q2.connector = 'OR'
# q2.children.append(('c1', 1))
# q2.children.append(('c1', 10))
# q2.children.append(('c1', 9))
# con.add(q1, 'AND')
# con.add(q2, 'AND')
#
# models.Tb1.objects.filter(con)
实列:
from django.shortcuts import render
from app1.models import * #导入数据库操作模块 from django.db.models import F,Q #导入F和Q from django.db.models import Count, Min, Max, Sum #逻辑处理模块
def special(request):
# Q(nid__gt=10)
a = yu_wen_lao_shi.objects.filter(Q(id__gt=3)).values() #获取id大于3的数据
print(a) #Q(nid=8) | Q(nid__gt=10)
b = yu_wen_lao_shi.objects.filter(Q(nl=20) | Q(nl=22)).values() #获取nl字段等于20,或者nl字段等于22的数据
print(b) c = yu_wen_lao_shi.objects.filter(Q(id__gt=2) & Q(nl=21)).values() #获取id大于2并且nl等于21的数据
print(c) return render(request,'index.html',locals()) #打开页面
执行原生SQL
# from django.db import connection, connections
# cursor = connection.cursor() # cursor = connections['default'].cursor()
# cursor.execute("""SELECT * from auth_user where id = %s""", [1])
# row = cursor.fetchone()
queryset对象序列化
django的json类型模块serialize()
from django.shortcuts import render
from app1.models import * #导入数据库操作模块 from django.db.models import F,Q #导入F和Q from django.core import serializers #django的将queryset对象转换成json类型模块
import json
#逻辑处理模块
def special(request):
# Q(nid__gt=10)
a = yu_wen_lao_shi.objects.filter(Q(id__gt=3)) #获取id大于3的数据
print(a) #得到queryset对象 b = serializers.serialize("json",a) #将queryset对象转换成json类型
print(b) #得到json类型 c = json.loads(b) #将json类型还原成Python数据类型
print(c)
return render(request,'index.html',locals()) #打开页面
# 返回:
# <QuerySet [<yu_wen_lao_shi: 张三4>, <yu_wen_lao_shi: 张三5>]>
# [{"model": "app1.yu_wen_lao_shi", "pk": 4, "fields": {"xm": "\u5f20\u4e094", "xb": "\u5973", "nl": "21", "shg": "174", "gz": "1500"}}, {"model": "app1.yu_wen_lao_shi", "pk": 5, "fields": {"xm": "\u5f20\u4e095", "xb": "\u5973", "nl": "23", "shg": "175", "gz": "1500"}}]
# [{'pk': 4, 'fields': {'xb': '女', 'shg': '174', 'gz': '1500', 'xm': '张三4', 'nl': '21'}, 'model': 'app1.yu_wen_lao_shi'}, {'pk': 5, 'fields': {'xb': '女', 'shg': '175', 'gz': '1500', 'xm': '张三5', 'nl': '23'}, 'model': 'app1.yu_wen_lao_shi'}]
list()将queryset对象转换成列表
from django.shortcuts import render
from app1.models import * #导入数据库操作模块 from django.db.models import F,Q #导入F和Q from django.core import serializers #django的将queryset对象转换成json类型模块
import json
#逻辑处理模块
def special(request):
# Q(nid__gt=10)
a = yu_wen_lao_shi.objects.filter(Q(id__gt=3)).values() #获取id大于3的数据
print(a) #得到queryset对象 b = list(a) #将queryset对象转换成列表
print(b) return render(request, 'index.html', locals()) # 打开页面 # 返回:
# <QuerySet [{'xb': '女', 'gz': '1500', 'id': 4, 'xm': '张三4', 'nl': '21', 'shg': '174'}, {'xb': '女', 'gz': '1500', 'id': 5, 'xm': '张三5', 'nl': '23', 'shg': '175'}]>
# [{'xb': '女', 'gz': '1500', 'id': 4, 'xm': '张三4', 'nl': '21', 'shg': '174'}, {'xb': '女', 'gz': '1500', 'id': 5, 'xm': '张三5', 'nl': '23', 'shg': '175'}]
由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:
queryset对象 import json
from datetime import date
from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime):
return o.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(field, date):
return o.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, field) # ds = json.dumps(queryset对象, cls=JsonCustomEncoder)
补充: models 中实现一个字段的默认值为当前登录用户
class ding_dan_guan_liAdmin(object):
list_display = ['nnd', 'ke_hu_qing_kuang', 'luyinyuan_chengben', 'shou_kuan_qing_kuang',
'ding_dan_zhuang_tai', 'jiaoyi_qingkuang', 'wengao_fabu']
model_icon = 'fa fa-pencil-square-o'
readonly_fields = ['nnd', 'xiadan_ren']
style_fields = {'bei_zhu': 'ueditor', 'wen_gao': 'ueditor'} # 使用富文本框插件 def save_models(self):
obj = self.new_obj
request = self.request
# 获取添加到订单用户值
yhu = obj.xiadan_ren
if not yhu:
obj.xiadan_ren = request.user
obj.save() xadmin.site.register(ding_dan_guan_li, ding_dan_guan_liAdmin)
第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化的更多相关文章
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 六 Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.ForeignKey()外键字段一对多,值是要外键的表类 from __future__ import unico ...
- 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...
- 第三百零三节,Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6
第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步 ...
随机推荐
- ORACLE11g中毒恢复
很不幸的,win2003server疏于管理,中毒了,清理了病毒以后.oracle也瘫痪了.上次备份还在一周前,这一周的数据咋办? 首先的想法,是另找一台机器,装个一模一样的oracle.再把被删的文 ...
- 转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类
/// <summary> /// 提供将泛型集合数据导出Excel文档. /// </summary> /// <typeparam name="T" ...
- spineRuntTime for cocos2dx v3,attack播完后回到idle
spineRuntTime for cocos2dx v3,attack播完后回到idle. _animationNode = spine::SkeletonAnimation::createWith ...
- cocos2dx CallFunc注意事项
CCDelayTime*delay=CCDelayTime::create(2); auto act = CallFunc::create([=](){ //func body ... }); ...
- CSDN日报20170403 ——《该不该离职?它说了算!》
[程序人生]该不该离职?它说了算! 作者:安晓辉 我在加油站工作,月薪扣除五险一金2000多.工作时间长,上班48小时歇息8小时. 今年单位改革把我们都外包出去了,承包人对我各种苛刻要求.有心辞职去干 ...
- cocos2d-x开发记录:二,基本概念(粒子系统,Scheduler和定时器)
七,粒子系统 1.导言 术语粒子系统是指计算机图形学技术,它使用大量非常小的精灵或其他图形对象来模拟某些种类的“模糊”现象,于传统渲染技术相比,它很难复制.通常是高度混沌无序的系统,自然现象.化学反应 ...
- 【Android】19.2 ShareActionProvider类—帮你把信息分享出去
分类:C#.Android.VS2015: 创建日期:2016-03-06 一.简介 共享操作提供程序类(ShareActionProvider)简化了你希望与其他人(或者其他应用程序)共享或分享出来 ...
- 一些常见的关于Linux系统的问题
1 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 答:[root@centos6 ~ 10:55 #35]# cat /proc/cpuinfo|grep -c 'physical i ...
- 递增和递减进度条CCProgressTimer
关于scheduleUpdate看这篇即可 http://www.benmutou.com/blog/archives/56 接下来是示例代码: CCSize size = CCDirector::s ...
- angular学习笔记(十三)
本篇主要介绍控制器的$scope中的数据是如何被改变的: 以下三种方法,都可以改变$scope中的number值: 1. 表达式: <span ng-click="number=num ...