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开发vim插件及心得分享
Nov 04 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
Windows下python3.6.4安装教程
Jul 31 Python
flask-restful使用总结
Dec 04 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
python实现字符串和数字拼接
Mar 02 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
python xlsxwriter模块的使用
Dec 24 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
杏林同学录(二)
2006/10/09 PHP
php字符串截取函数用法分析
2014/11/25 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
php的常量和变量实例详解
2017/06/27 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
vue实现购物车列表
2020/06/30 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
Python实现简单的代理服务器
2015/07/25 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
python让列表倒序输出的实例
2018/06/25 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Django跨域请求原理及实现代码
2020/11/14 Python
数百万免费的图形资源:Freepik
2020/09/21 全球购物
恶意软件的定义
2014/11/12 面试题
车队司机个人自我鉴定
2014/04/17 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
趵突泉导游词
2015/02/03 职场文书
情人节单身感言
2015/08/03 职场文书
如何撰写创业策划书
2019/06/27 职场文书
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js