Django对数据库进行添加与更新的例子

  

先把models.py摆这儿

        # models.py   UserProfile类(AbstractUser):   “‘   继承Django的AbstractUser并向里面添加两条数据内容怀疑   “‘   性别=models.CharField (max_length=6,选择=((“男性”,“男”),('女','女')),默认=浴?verbose_name=靶浴北?   备忘录=模型。文本框(null=True,空白=True, verbose_name=北闱?   类元:   verbose_name='用户信息的   verbose_name_plural=verbose_name #指定模型的复数形式是什么,如果不指定Django会自动在模型名称后加一个“年代”      类UserTodo (models.Model):   created_time=models.DateTimeField(默认=datetime.now (), verbose_name=按唇ㄊ奔涞?   user_id=models.ForeignKey (UserProfile on_delete=模型。C ASCADE) #设置外键,关联到UserProfile表   # models.CASCADE表示若删除某一用户,则该用户下的所有UserTodo也会被删除   基于=models.CharField (max_length=255, verbose_name=按焓孪睢?   做=models.BooleanField(默认=False, verbose_name=巴瓿勺刺?   类元:   verbose_name='用户自增信息的   verbose_name_plural=verbose_name   之前      

<强>一,将数据保存到数据库中(在views.py中)

  

完成模型后,在终端运行python管理。py makemigrations生成数据库,然后可以进行保存操作

  

<强>对于没有没有外键的数据库:

        从进口UserProfile得閒   从django.contrib.auth。切肉机进口make_password   user_profile=UserProfile ()   user_profile。用户名=用户名   user_profile。电子邮件=电子邮件   user_profile。密码=make_password(密码)# make_password是django自带的给密码重新编码技术,存储在数据库中   user_profile。is_active=True #判断用户是否激活   user_profile.save ()      

<强>有外键的数据库

  

1,首先应先获取关联的数据库的信息,如果为用户则为用的在数据库中的ID

  

user_id=UserProfile.objects.get(用户名=request.user) # request.user表示当前登陆的用户名称,后台实际上是用户名

  

2,保存到数据库中

        user_todo=UserTodo(基于=待办事项,完成=,user_id=user_id created_time=datetime.now())保存到数据库中时按照用户名所在的id进行保存   user_todo.save ()      

<强>二,对数据库进行更新及查询的操作

  

动机是当用户点击网页上的X号是对数据库中完成的进行更新,更新为真的。

  

一开始想着按照身份证进行更新,但是当用户多了以后id与网页上显示的id肯定不相同。

  

经过我的苦苦思索,每个用户中创建todo的时间肯定不相同,因此可以依据created_time可以进行搜索,来完成对进行更新。

  

说干就干!

  

1,先查询我们想要的那一条数据

  

用户的todo显示在网页上时是按照created_time进行了排序,因此在更新的时候也按照created_time进行排序,这样子便不会出错。

        user_id=UserProfile.objects.get(用户名=request.user) #获取当前登陆用户的todo id(按照后台的打印实际上为用户名)   todo_query=UserTodo.objects。过滤器(user_email=user_id=False) #按照user_id,做进行对数据库的筛选   #在UserTodo表中找出user_id以及该用户下做=False的数据   # todo_query的类型为& lt;类django.db.models.query.QuerySet的祝辞   todo_query=todo_query.order_by (created_time) #按照截至日期按照从小到大的顺序进行筛选,若要从大到小排序则(-created_time)      

现在的结果是我们已经得到了该用户名下的所有做=False的数据,并且已经完成了排序

  

接下来就是找到我们想要的那一条数据

        todo_dict=todo_query.values (created_time) #经过值,得到created_time的那一列数据      

类型依旧为QuerySet,但只有一种数据,即全部是created_time的数据,这时就可以提取我们想要的数据了

        time_dict [3] [' created_time '] # QuerySet中第四个名称为created_time的数据(序号从0开始,因此3是第四个)3为网页上元素的索引            打印打印(time_dict [3] [' created_time '])的结果为:2018-06-07 01:45:10.938825 + 0      

到此已经完成数据的查询。

  

2,对数据进行更新

  

已经是小菜一碟了hiahiahia…

  

按照上述查询到的created_time,来找出当前用户下符合这一个cteated_time的记录(肯定只有一条)

Django对数据库进行添加与更新的例子