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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
python opencv之分水岭算法示例
Feb 24 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python命令行工具Click快速掌握
Jul 04 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
浅析Python requests 模块
Oct 09 Python
基于Python中Remove函数的用法讨论
Dec 11 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
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
美国旅游网站:Tours4Fun
2017/02/17 全球购物
理工大学毕业生自荐信范文
2014/02/22 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
接收函格式
2015/01/30 职场文书
驳回起诉裁定书
2015/05/19 职场文书
入团申请书格式
2019/06/20 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python