Django项目之模型增删改查操作(CRUD)

  模型创建之后,Django自动为我们的模型生成了一套完整、方便、高效的API,用来对数据进行增删改查。

  接下来我们结合之前创建的Modles来进行介绍,下面是我们的Models代码:

from django.db import models
from django.contrib.auth.models import User 
#导入Django自带用户模块

# 文章分类
class Category(models.Model):
    name = models.CharField('博客分类', max_length=100)
    index = models.IntegerField(default=999, verbose_name='分类排序')

    class Meta:
        verbose_name = '博客分类'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#文章标签
class Tag(models.Model):
    name = models.CharField('文章标签',max_length=100)
    class Meta:
        verbose_name = '文章标签'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#推荐位
class Tui(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)
    excerpt = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name='分类', blank=True, null=True)
     #使用外键关联分类表与分类是一对多关系
    tags = models.ManyToManyField(Tag,verbose_name='标签', blank=True)
    #使用外键关联标签表与标签是多对多关系
    img = models.ImageField(upload_to='article_img/%Y/%m/%d/', verbose_name='文章图片', blank=True, null=True)
    body = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
     """
     文章作者,这里User是从django.contrib.auth.models导入的。
     这里我们通过 ForeignKey 把文章和 User 关联了起来。
     """
    views = models.PositiveIntegerField('阅读量', default=0)
    tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING, verbose_name='推荐位', blank=True, null=True)
    
    created_time = models.DateTimeField('发布时间', auto_now_add=True)
    modified_time = models.DateTimeField('修改时间', auto_now=True)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'

    def __str__(self):
        return self.title

1.基础准备

  我们先来配置下URL:

myblog/views.py

from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('orm/', views.orm, name='orm'),    # 新增
]

再添加一个与URL对应的视图函数:

from django.shortcuts import render, HttpResponse

# Create your views here.
def orm(request):

    return HttpResponse('orm')

在浏览器中访问http://127.0.0.1:8000/orm/ ,就会在浏览器中看到输入“orm”。我们这么做的目的是一会我们进行数据操作的方法全都写在orm这个视图函数中,这样通过访问URL就可以触发视图函数,从而来验证我们的效果。

 2.新增数据(add)

blog/views.py

from django.shortcuts import render, HttpResponse
from .models import Article

# Create your views here.
def orm(request):
    # 增加一篇文章
    Article.objects.create(title='标题一', excerpt='摘要一', body='正文一', category_id=4, tui_id=2, user_id=1)
    return HttpResponse('orm')

在进行新增操作之前,数据库中文章内容如下:

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

 从上面的图中可以看到我们已经成功添加了一篇文章,证明我们新增文章成功。

数据新增的方法有三种:

blog/views.py

from django.shortcuts import render, HttpResponse
from .models import Article

# Create your views here.
def orm(request):
    # 第一种方法:
    # Article.objects.create(title='标题一', excerpt='摘要一', body='正文一', category_id=4, tui_id=2, user_id=1)
    # 第二种方法:添加数据,实例化表类,在实例化里传参为字段和值
    obj = Article(title='标题二', excerpt='摘要二', body='正文二', user_id=1, category_id=4, tui_id=2, )
    # 写入数据库
    obj.save()
    # 第三种方法:将要写入的数据组合成字典,键为字段,值为数据
    dic = {'title': '标题三', 'excerpt': '摘要三', 'body': '正文三', 'category_id': '4', 'tui_id': '2', 'user_id': '1'}
    # 添加到数据库,注意字典变量名称一定要加**
    Article.objects.create(**dic)
    return HttpResponse('orm')

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

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

严格来说,增加数据只有两种:create( )方法和save( )方法。一般我们推荐使用第三种方法

3.删除数据(delete)

from django.shortcuts import render, HttpResponse
from .models import Article

# Create your views here.
def orm(request):
    # 删除id为8的文章(数据)
    Article.objects.filter(id=8).delete()
    return HttpResponse('orm')

删除之前:

 删除之后:

 从上图可以看到ID为8的文章已经被删除了。

4.更新数据(update)

from django.shortcuts import render, HttpResponse
from .models import Article

# Create your views here.
def orm(request):
    # 把id=7的文章标题,修改成'我是被修改后的标题二'。将指定条件的数据更新,支持 **kwargs,支持字典。
    Article.objects.filter(id=7).update(title='我是被修改后的标题二')
    return HttpResponse('orm')

修改之前:

 修改之后:

 从上图可以看到ID=7的文章标题被修改成功了!

5.查询数据

from django.shortcuts import render, HttpResponse
from .models import Article

# Create your views here.
def orm(request):
    # 查询所有数据,查询结果为QuerySet,返回当前表中的所有记录
    # articles = Article.objects.all()

    # 使用filter()方法过滤指定条件的记录
    # article = Article.objects.filter(id=1)

    # 使用get()方法查询指定条件的记录
    article = Article.objects.get(id=1)
    return HttpResponse('orm')

Django提供的查询API还有很多,这里就不一一介绍了,后续再整理!

猜你喜欢

转载自www.cnblogs.com/lwjnicole/p/12324448.html