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随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
十条建议帮你提高Python编程效率
Feb 16 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
python实现顺时针打印矩阵
Mar 02 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
python实现查找所有程序的安装信息
Feb 18 Python
Django中的AutoField字段使用
May 18 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 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
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php输出xml属性的方法
2015/03/19 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python读写ini文件的方法
2015/05/28 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python Django 创建应用过程图示详解
2019/07/29 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
会计实习自我鉴定
2013/12/04 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
优秀志愿者感言
2015/08/01 职场文书
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server