Django2.0入门教程:ORM增删改操作

我们建立模型、保存数据为的就是在需要的时候可以查询得到数据。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.jpg

1.jpg

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')


操作之前,数据库里的文章内容如下:

1.jpg

在浏览器里访问http://127.0.0.1:8000/orm/之后,触发视图函数。然后刷新数据库看效果。

2.jpg

数据库里已经添加了一篇文章。说明我们之前的增加文章操作,已经成功。

如果不知道如何使用Database管理数据库,请查看文章:使用Pycharm里的Database对数据库进行可视化操作

数据增加的方法一共有三种:

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')

使用第二和第三种方法增加数据,刷新页面之后,数据库效果如下:

3.jpg
我们看到,数据库里已经增加了两条数据。

严格来说,增加数据只有两种: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')

删除之前:

3.jpg

删除之后:

1.jpg

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')

修改前:

1.jpg

修改之后:

2.jpg

修改成功!


文章评论 4

  • AccountForm.UserAdd这个AccountForm对象从哪里来啊?

  • request.POST 从POST 的数据里面获取的啊。 AccountForm.UserAdd 是方法 也就是函数。括号里的(request.POST) 才是对象。 同时把 AccountForm.UserAdd(request.POST) 这个增加账号的动作又定义为了一个方法=函数=对象=obj

  • 应该说是 用这个AccountForm类下面的UserAdd方法实例化了成了对象obj