日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

56_Django数据库_ORM外键删除操作详解

發(fā)布時間:2024/1/18 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 56_Django数据库_ORM外键删除操作详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 級聯(lián)操作
繼續(xù)用上一節(jié)的項目案例,在article下的views.py文件中更新代碼:

from django.shortcuts import render from .models import Category,Article from django.http import HttpResponsedef index(request): article = Article.objects.first()print(article.category.name)return HttpResponse("success")def delete_view(request):category = Category.objects.get(pk=1)category.delete()return HttpResponse("刪除成功")

將函數(shù)映射到urls文件中

from django.urls import path from . import viewsapp_name = 'article'urlpatterns = [path('',views.index,name='index'),path('delete/',views.delete_view,name='delete'), ]

保存后,瀏覽器中打開http://127.0.0.1:8000/delete/網(wǎng)址,category表中的第一條數(shù)據(jù)被刪除,article表中id=1類別的內(nèi)容也會被刪除。

2. PROTECT受保護的
如果外鍵被引用,那么將不能被刪除
在category表中創(chuàng)建一條數(shù)據(jù)如下

在article表中創(chuàng)建一條數(shù)據(jù),category_id=2,具體如下:

在project下的models.py文件中更新代碼如下:

from django.db import modelsclass Category(models.Model):name = models.CharField(max_length=100)class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()#改為PROTECTcategory = models.ForeignKey("Category",on_delete=models.PROTECT)author = models.ForeignKey("frontuser.Frontuser",on_delete=models.CASCADE,null=True)class Comment(models.Model):content = models.TextField()origin_comment = models.ForeignKey("self",on_delete=models.CASCADE)

將article下的views.py文件更新代碼如下:

from django.shortcuts import render from .models import Category,Article from django.http import HttpResponsedef index(request): article = Article.objects.first()print(article.category.name)return HttpResponse("success")def delete_view(request):#pk變?yōu)?category = Category.objects.get(pk=2)category.delete()return HttpResponse("刪除成功")

保存后,打開http://127.0.0.1:8000/delete/網(wǎng)址,報錯,提示不能刪除。

3. SET_NULL設置為空
在article下的models.py文件中更新代碼:

from django.db import modelsclass Category(models.Model):name = models.CharField(max_length=100)class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()#設置為SET_NULL,并且null要設置為Truecategory = models.ForeignKey("Category",on_delete=models.SET_NULL,null=True)author = models.ForeignKey("frontuser.Frontuser",on_delete=models.CASCADE,null=True)class Comment(models.Model):content = models.TextField()origin_comment = models.ForeignKey("self",on_delete=models.CASCADE)

把模型映射到數(shù)據(jù)庫當中,(具體參考47_Django數(shù)據(jù)庫_創(chuàng)建和映射ORM模型)
保存后,打開http://127.0.0.1:8000/delete/網(wǎng)址
運行成功,這樣category下面的數(shù)據(jù)刪除,article表中的數(shù)據(jù)未刪除,category變?yōu)閚ull。

4. SET_DEFAULT設置默認值
在category表中,建立一個新的分類,id自動設置為3,名稱設置為“財經(jīng)欄目”;再新建一個分類,id自動設置為4,名稱設置為“默認分類”。
article文章中的書category_id設置為3。
更新article下models.py中的代碼:

from django.db import modelsclass Category(models.Model):name = models.CharField(max_length=100)class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()#此處更新category = models.ForeignKey("Category",on_delete=models.SET_DEFAULT,null=True,default=Category.objects.get(pk=4))author = models.ForeignKey("frontuser.Frontuser",on_delete=models.CASCADE,null=True)class Comment(models.Model):content = models.TextField()origin_comment = models.ForeignKey("self",on_delete=models.CASCADE)

更新views.py中的代碼

from django.shortcuts import render from .models import Category,Article from django.http import HttpResponsedef index(request):article = Article.objects.first()print(article.category.name)return HttpResponse("success")def delete_view(request):#此處調(diào)整pk=3category = Category.objects.get(pk=3)category.delete()return HttpResponse("刪除成功")

保存后,打開http://127.0.0.1:8000/delete/網(wǎng)址
運行成功,這樣category下面的數(shù)據(jù)刪除,article表中的數(shù)據(jù)未刪除,category變?yōu)槟J值。

5. SET()將函數(shù)值作為外鍵值
為了演示方便,分別在category里新建一條數(shù)據(jù)

更新article表格里面的分類

更新article下models.py里面的代碼

from django.db import modelsclass Category(models.Model):name = models.CharField(max_length=100)class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()#set里面的值為替換的外鍵值category = models.ForeignKey("Category",on_delete=models.SET(Category.objects.get(pk=4)),null=True)author = models.ForeignKey("frontuser.Frontuser",on_delete=models.CASCADE,null=True)class Comment(models.Model):content = models.TextField()origin_comment = models.ForeignKey("self",on_delete=models.CASCADE)

修改views.py里面的代碼

from django.shortcuts import render from .models import Category,Article from django.http import HttpResponsedef index(request): article = Article.objects.first()print(article.category.name)return HttpResponse("success")def delete_view(request):#pk改為5category = Category.objects.get(pk=5)category.delete()return HttpResponse("刪除成功")

來源:知了學院

總結(jié)

以上是生活随笔為你收集整理的56_Django数据库_ORM外键删除操作详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。