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多线程(python多线程简明教程)
Jun 09 Python
python修改注册表终止360进程实例
Oct 13 Python
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
python生成ppt的方法
Jun 07 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
pycharm配置git(图文教程)
Aug 16 Python
Java Unsafe类实现原理及测试代码
Sep 15 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
世界上第一台立体声收音机
2021/03/01 无线电
PHP 实例化类的一点摘记
2008/03/23 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
html+js实现动态显示本地时间
2013/09/21 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
React 组件间的通信示例
2018/06/14 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
python中return不返回值的问题解析
2020/07/22 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
请假条的格式
2014/04/11 职场文书
服务承诺书范文
2014/05/19 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
二年级学生期末评语
2014/12/26 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android