最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django多對多表的創(chuàng)建,級聯(lián)刪除及手動創(chuàng)建第三張表

 更新時間:2019年07月25日 11:01:46   作者:谷子的  
這篇文章主要介紹了django多對多表的創(chuàng)建,級聯(lián)刪除及手動創(chuàng)建第三張表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

創(chuàng)建一張作者表,author,創(chuàng)建外鍵與book表,多對多關(guān)系 ,外鍵字段放在那張表都可以,

class Author(models.Model):

  name = models.CharField(max_length=32)

  #在Author表中創(chuàng)建第三張表,與book表創(chuàng)建多對多關(guān)系一樣的效果

  # books = models.ManyToManyField(Book)

  #再重新生成數(shù)據(jù)庫,因為新增了多對多關(guān)系,book表會新增字段,所以直接重新生成數(shù)據(jù)庫就會報錯,

在book表里,關(guān)聯(lián)Author表,Author就要放在book表上面,

關(guān)聯(lián)的表Author加上引號是字符串,是一個查詢過程,等加載完,找Author,

就可以在全局找到,

不加引號,就要把Author表放在book表上面

在book表中,創(chuàng)建與author表多對多的關(guān)系

class Book(models.Model):

  title = models.CharField(max_length=32)
  price = models.DecimalField(max_digits=5 , decimal_places=2)

  #書籍與出版社是一對多,書是多,出版社是一,外鍵(子表)建在多的表中,
  #publish 作為一個外鍵 與Book 表建立一對多關(guān)系,默認綁定到Book 的主鍵id上
  publish = models.ForeignKey(Publish,)

然后生成數(shù)據(jù)庫,注意:如果book表中有數(shù)據(jù),直接生成數(shù)據(jù),就會報錯,因為book表會新增一個author_id 字段,而原來的book表中的數(shù)據(jù)沒有改字段,所以會報錯,刪除book表中的數(shù)據(jù)

執(zhí)行命令 python manage.py makemigrations ,python manage.py migrate,

在數(shù)據(jù)庫會發(fā)現(xiàn)新增一張表,book_author,是第三張表 ,一個主鍵,2個外鍵,是django自動創(chuàng)建的,現(xiàn)在就可以添加書籍

在創(chuàng)建的表里,手動插入數(shù)據(jù),,然后綁定book與author的多對多關(guān)系,

在views視圖函數(shù)中,,先獲取Book表的一個book對象,查看該book關(guān)聯(lián)的作者,就是book_obj.authors.all(),

id =1的這本書,如果沒有關(guān)聯(lián)的作者,返回None,如果有作者,就返回一個對象集合,QuerySet數(shù)據(jù)類型,里面包含了關(guān)聯(lián)的作者對象

#給第三張表添加關(guān)系,
  #看下authors對象

  book_obj = Book.objects.get(id=1)#獲取一個書籍的對象,有可能是多個作者寫的,是一個集合對象,

  #獲取id=1 這本書的作者集合對象,類似列表結(jié)構(gòu)
  print(book_obj.authors) #gu_orm.Author.None ,是id=1的這本書,沒有作者,所以得到一個None,-----------------------------
  #如果給Book和author綁定了關(guān)系,添加值,就會得到一個Queryset集合,
  print(book_obj.authors.all())
  #< QuerySet[ < Author: egon >, < Author: alex >, < Author: yuan >] >---------------------------------------

---------------

方法1:多對多關(guān)系的創(chuàng)建,獲取一個個對象,添加

現(xiàn)在用代碼實現(xiàn)多對多關(guān)系的創(chuàng)建

先刪除原第三張表的數(shù)據(jù),

步驟1 ,先得到一個Book對象

book_obj = Book.objects.get(id=1)#獲取一個書籍的對象,有可能是多個作者寫的,是一個集合對象,

步驟2 :獲取1個或2個以上author對象

 author1 = Author.objects.get(id=1)
 author2 = Author.objects.get(id=2)

步驟3: 把author1,和author2 添加到 book_obj 對象中,使用add方法,書對象關(guān)聯(lián)的作者表,添加2個作者對象

#book表與author表綁定關(guān)系,把2個作者對象添加到,關(guān)聯(lián)到Book對象
  book_obj.authors.add(author1,author2)

然后再執(zhí)行url,刷新數(shù)據(jù)庫

===

方法2:多對多關(guān)系的創(chuàng)建,獲取所有的對象集合,添加 ,記得用 * 號,把列表拆開,一個個的獲取對象

#先獲取一個book對象,
book_obj = Book.objects.get(id=1)

#方法2 ,把所有的author加到book對象中
  author_list = Author.objects.all()
  book_obj.authors.add(*author_list)

=====

解除關(guān)聯(lián)關(guān)系clear()清除所有的關(guān)系 ,remove()刪除指定的關(guān)系

#解除關(guān)聯(lián)關(guān)系
  book_obj.authors.clear()#解除了書與作者的所有關(guān)系,

  #指定刪除Book與作者的關(guān)系,先獲取要解除關(guān)聯(lián)的對象,然后用remove的方法,
  author = Author.objects.get(name = 'alex')

  book_obj.authors.remove(author)

----

級聯(lián)刪除,刪除一個對象,相關(guān)聯(lián)的一對多,多對多關(guān)系都會刪除,delte()

book_obj.delete()

----

manytomany 是django自己會生成第三張表,

自己手動也可以創(chuàng)建第三張表

#  manytomany,會自動生成第三張表,現(xiàn)在自己可以手動創(chuàng)建第3張表,

class book2author(models.Model):

  book = models.ForeignKey("Book")
  author = models.ForeignKey("Author")

數(shù)據(jù)庫中就多出book2author這張表

在views視圖函數(shù)添加一條記錄

  #----給自己手動創(chuàng)建的第三張?zhí)砑佑涗?,實列化對象,用save保存
  b2a = book2author(book_id=2,author_id=1)#括號里面可以寫集合,作者的集合對象,進行關(guān)聯(lián),
  b2a.save()
  return HttpResponse('ok')

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 人工智能—Python實現(xiàn)線性回歸

    人工智能—Python實現(xiàn)線性回歸

    這篇文章主要介紹了人工智能—Python實現(xiàn)線性回歸,人工智能分為類型、數(shù)據(jù)集、效果評估、等,線性回歸根據(jù)隨機初始化的?w?x?b?和?y?來計算?loss等步驟實現(xiàn),下面來看看文章的具體實現(xiàn)吧
    2022-01-01
  • 簡單介紹Python中的floor()方法

    簡單介紹Python中的floor()方法

    這篇文章主要介紹了Python中的floor()方法,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 基于Python實現(xiàn)的車牌識別系統(tǒng)

    基于Python實現(xiàn)的車牌識別系統(tǒng)

    本文將以基于Python的車牌識別系統(tǒng)實現(xiàn)為方向,介紹車牌識別技術(shù)的基本原理、常用算法和方法,并詳細講解如何利用Python語言實現(xiàn)一個完整的車牌識別系統(tǒng),需要的朋友可以參考下
    2023-10-10
  • python使用matplotlib繪制柱狀圖教程

    python使用matplotlib繪制柱狀圖教程

    這篇文章主要介紹了python使用matplotlib繪制柱狀圖的方法教程,其中實現(xiàn)的柱狀圖效果包括基本的柱狀圖、堆疊柱狀圖、并列柱狀圖、條形圖以及柱狀圖的各種樣式設(shè)置,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Matplotlab顯示OpenCV讀取到的圖像

    Matplotlab顯示OpenCV讀取到的圖像

    本文介紹了如何使用OpenCV和Matplotlib處理圖像,本文通過實例講解的非常詳細,對Matplotlab?OpenCV圖像相關(guān)處理方法感興趣的朋友一起看看吧
    2025-02-02
  • Python爬蟲新手入門之初學(xué)lxml庫

    Python爬蟲新手入門之初學(xué)lxml庫

    這篇文章主要給大家介紹了關(guān)于Python爬蟲新手入門之初學(xué)lxml庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python 實現(xiàn)tar文件壓縮解壓的實例詳解

    python 實現(xiàn)tar文件壓縮解壓的實例詳解

    這篇文章主要介紹了python 實現(xiàn)tar文件壓縮解壓的實例詳解的相關(guān)資料,這里提供實現(xiàn)方法,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)字典相關(guān)計算問題示例

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)字典相關(guān)計算問題示例

    這篇文章主要介紹了Python字典相關(guān)計算問題,結(jié)合實例形式總結(jié)分析了Python字典相關(guān)的最小值、最大值、排序等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-02-02
  • Python使用ntplib庫同步校準當?shù)貢r間的方法

    Python使用ntplib庫同步校準當?shù)貢r間的方法

    NTP網(wǎng)絡(luò)時間協(xié)議其實大家平時或多或少都能接觸到,包括Windows在內(nèi)的操作系統(tǒng)中的很多Internet時間同步功能都是在NTP的基礎(chǔ)上來做,這里我們來看一下Python使用ntplib庫同步校準當?shù)貢r間的方法
    2016-07-07
  • python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中

    python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中

    這篇文章主要介紹了python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

天柱县| 新巴尔虎左旗| 泗阳县| 长海县| 大名县| 沂源县| 城固县| 海淀区| 万盛区| 黑龙江省| 阿勒泰市| 广灵县| 繁峙县| 翁源县| 闽清县| 沽源县| 芮城县| 仁布县| 南丰县| 凤翔县| 策勒县| 仲巴县| 高平市| 金昌市| 连江县| 博兴县| 本溪| 鲁山县| 澜沧| 包头市| 二连浩特市| 成安县| 彭阳县| 依兰县| 平罗县| 古浪县| 合川市| 满洲里市| 股票| 大余县| 榆林市|