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回溯法实现数组全排列输出实例分析
Mar 17 Python
python中的计时器timeit的使用方法
Oct 20 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python输出各行命令详解
Feb 01 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
python对html过滤处理的方法
Oct 21 Python
自学python的建议和周期预算
Jan 30 Python
python word转pdf代码实例
Aug 16 Python
如何基于Python创建目录文件夹
Dec 31 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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来检测proxy
2006/10/09 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
用实例解释Python中的继承和多态的概念
2015/04/27 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
Python中optparser库用法实例详解
2018/01/26 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
最经典的商业地产项目广告词
2014/03/13 职场文书
小学教师工作总结2015
2015/04/07 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
用Python selenium实现淘宝抢单机器人
2021/06/18 Python