首页 > 其他 > 详细

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

时间:2020-02-20 00:58:02      阅读:89      评论:0      收藏:0      [点我收藏+]

  模型创建之后,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还有很多,这里就不一一介绍了,后续再整理!

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

原文:https://www.cnblogs.com/lwjnicole/p/12324448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!