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