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還有很多,這里就不一一介紹了,后續再整理!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM