Django对数据库进行添加与更新的例子


Posted in Python onJuly 12, 2019

先把models.py摆这儿

#models.py
class UserProfile(AbstractUser):
 '''
 继承Django的AbstractUser 并向里面添加两条数据内容怀疑
 '''
 gender = models.CharField(max_length=6,choices=(('male','男'),('female','女')),default='female',verbose_name='性别')
 memo = models.TextField(null=True, blank=True,verbose_name='便签')
 class Meta:
  verbose_name = '用户信息'
  verbose_name_plural = verbose_name #指定模型的复数形式是什么,如果不指定Django会自动在模型名称后加一个's'
 
class UserTodo(models.Model):
 created_time = models.DateTimeField(default=datetime.now(),verbose_name='创建时间')
 user_id = models.ForeignKey(UserProfile,on_delete=models.C ASCADE) #设置外键,关联到UserProfile表
 # models.CASCADE表示若删除某一用户,则该用户下的所有UserTodo也会被删除
 ToDolist = models.CharField(max_length=255,verbose_name='todo')
 done = models.BooleanField(default=False,verbose_name='完成状态')
 class Meta:
  verbose_name = '用户自增信息'
  verbose_name_plural = verbose_name

一、将数据保存到数据库中(在views.py中)

完成model后,在Terminal运行python manage.py makemigrations 生成数据库。然后可以进行保存操作

对于没有没有外键的数据库:

from .models import UserProfile
from django.contrib.auth.hashers import make_password
user_profile = UserProfile()
user_profile.username = username
user_profile.email = email
user_profile.password = make_password(password) #make_password是django自带的给password重新编码技术,存储在数据库中
user_profile.is_active = True #判断用户是否激活
user_profile.save()

有外键的数据库

1、首先应先获取关联的数据库的信息,如果为用户则为用的在数据库中的ID

user_id = UserProfile.objects.get(username=request.user) #request.user表示当前登陆的用户名称,后台实际上是用户名

2、保存到数据库中

user_todo = UserTodo(ToDolist=todo,done=done,user_id=user_id,created_time=datetime.now()) 保存到数据库中时按照用户名所在的id进行保存
user_todo.save()

二、对数据库进行更新及查询的操作

动机是当用户点击网页上的X号是对数据库中的done进行更新,更新为True。

一开始想着按照id进行更新,但是当用户多了以后id与网页上显示的id肯定不相同。

经过我的苦苦思索,每个用户中创建todo的时间肯定不相同,因此可以依据created_time可以进行搜索,来对done进行更新。

说干就干!

1、先查询我们想要的那一条数据

用户的todo显示在网页上时是按照created_time进行了排序,因此在更新的时候也按照created_time进行排序,这样子便不会出错。

user_id = UserProfile.objects.get(username=request.user) #获取当前登陆用户的todo id(按照后台的打印实际上为用户名)
todo_query = UserTodo.objects.filter(user_email=user_id, done=False) #按照user_id、done进行对数据库的筛选
#在UserTodo表中找出user_id以及该用户下done=False的数据
#todo_query的类型为<class 'django.db.models.query.QuerySet'>
todo_query = todo_query.order_by("created_time") # 按照截至日期按照从小到大的顺序进行筛选,若要从大到小排序则("-created_time")

现在的结果是我们已经得到了该用户名下的所有done=False的数据,并且已经完成了排序

接下来就是找到我们想要的那一条数据

todo_dict = todo_query.values("created_time") #经过values,得到created_time的那一列数据

类型依旧为QuerySet,但只有一种数据,即全部是created_time的数据,这时就可以提取我们想要的数据了

time_dict[3]['created_time'] #QuerySet中第四个名称为created_time的数据(序号从0开始,因此3是第四个)3为网页上元素的索引
打印print(time_dict[3]['created_time'])的结果为:2018-06-07 01:45:10.938825+00:00

到此已经完成数据的查询。

2、对数据进行更新

已经是小菜一碟了hiahiahia。。。

按照上述查询到的created_time,来找出当前用户下符合这一个cteated_time 的记录(肯定只有一条)

time_index = time_dict[id]['created_time'] #id为从前端传过来的网页上元素的id
User = UserTodo.objects.get(user_id=user_id,created_time=time_index)
User.done = True
User.save()

Done!

以上这篇Django对数据库进行添加与更新的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的系统实用log类实例
Jun 30 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
python中的tcp示例详解
Dec 09 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 Python
Python机器学习之基础概述
May 19 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 #Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 #Python
python实现简单聊天室功能 可以私聊
Jul 12 #Python
pyinstaller参数介绍以及总结详解
Jul 12 #Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 #Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 #Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 #Python
You might like
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
token 机制和实现方式
2020/12/15 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
互动出版网:专业书籍
2017/03/21 全球购物
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
促销活动方案模板
2014/02/24 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
建筑安全责任书范本
2014/07/24 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
财务会计岗位职责
2015/02/03 职场文书
千与千寻观后感
2015/06/04 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技