我们建立模型、保存数据为的就是在需要的时候可以查询得到数据。Django自动为所有的模型提供了一套完善、方便、高效的API。
结合之前我们创建的Models,下面是我们的models.py代码:
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField('分类',max_length=100)
class Meta:
verbose_name = '分类'verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Tags(models.Model):
name = models.CharField('标签',max_length=100)
class Meta:
verbose_name = '标签'verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField('标题',max_length=70)
intro = models.TextField('摘要', max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', default='1')
tags = models.ManyToManyField(Tags, blank=True, verbose_name='标签')
body = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
created_time = models.DateTimeField('发布时间',auto_now_add=True)
class Meta:
verbose_name = '文章'verbose_name_plural = verbose_name
def __str__(self):
return self.title
1、基础准备
配置URL
mysite/urls.py
from blog import views #新增
urlpatterns = [
path('admin/', admin.site.urls),
path('orm/', views.orm), #新增
]
添加一个与URL对应的视图函数
blog/views.py
from django.shortcuts import render, HttpResponse
from blog import models
def orm(requst):
return HttpResponse('orm')
在浏览器里访问http://127.0.0.1:8000/orm/。我们这样做的目的是,我们一会把数据操作方法(查询语句)都写在 orm视图函数里,通过URL,触发视图函数,然后在Pycharm的Terminal里查看输出日志,验证我们查询的效果。
2、增加数据
blog/views.py
from django.shortcuts import render, HttpResponse
from blog import models
def orm(requst):
#增加一篇文章
models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1)
return HttpResponse('orm')
操作之前,数据库里的文章内容如下:
扫描二维码关注公众号,回复:
15933051 查看本文章
在浏览器里访问http://127.0.0.1:8000/orm/之后,触发视图函数。然后刷新数据库看效果。
数据库里已经添加了一篇文章。说明我们之前的增加文章操作,已经成功。
数据增加的方法一共有三种:
使用第二和第三种方法增加数据,刷新页面之后,数据库效果如下:
from django.shortcuts import render, HttpResponse
from blog import models # 导入数据库操作模块
def orm(requst):
# 第一种方法:
# models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1)
# 第二种方法:添加数据,实例化表类,在实例化里传参为字段和值
obj = models.Article(title='增加标题二', category_id=4, body='增加内容二', user_id=1)
# 写入数据库
obj.save()
# 第三种方法:将要写入的数据组合成字典,键为字段值为数据
dic = {'title': '增加标题三', 'category_id': '4', 'body': '增加内容三', 'user_id': '1'}
# 添加到数据库,注意字典变量名称一定要加**
models.Article.objects.create(**dic)
return HttpResponse('orm')
我们看到,数据库里已经增加了两条数据。
严格来说,增加数据只有两种:create( )方法和save( )方法。一般我们推荐使用第三种方法。
例子:获取用户提交的的数据创建用户:
#hmtl
<form action="/useradd/" method="post">
<p>用户名:{
{ obj.username }}</p>
<p>密码:{
{ obj.password }}</p>
<input type="submit" value="submit"/>
</form>
#views
def useradd(request):
obj = AccountForm.UserAdd(request.POST)
if request.method == 'POST':
if obj.is_valid():
user_input = obj.clean()
print user_input
#这里直接通过**加上用户的输入即可,因为用户的输入时字典类型的
models.UserInfo.objects.create(**user_input)
print models.UserInfo.objects.all()
return render(request,'account/useradd.html',{'obj':obj})
return render(request,'account/useradd.html',{'obj':obj})
#结果
--用户输入
{'username': 'dashuaige', 'password': '123123'}
--print models.UserInfo.objects.all() 返回值
#注这里我们是通过__unicode__方法进行输出了否则是对象!
[<UserInfo: sunqihu>, <UserInfo: alex>, <UserInfo: wutenglan>, <UserInfo: dashuaige>]
三、删除数据delete()
from django.shortcuts import render, HttpResponse
from blog import models
def orm(requst):
#删除id=6的文章(数据)
title = models.Article.objects.filter(id=6).delete()
return HttpResponse('orm')
删除之前:
删除之后:
ID为6的文章,已经被删除。
四、修改数据update(字段=值)
from django.shortcuts import render, HttpResponse
from blog import models
def orm(requst):
#把标题'增加标题二',修改成'我被修改了'。将指定条件的数据更新,支持 **kwargs,支持字典。
title = models.Article.objects.filter(title='增加标题二').update(title='我被修改了')
return HttpResponse('orm')
修改前:
修改之后:
修改成功!