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

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

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

創(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ù)庫,因?yàn)樾略隽硕鄬Χ嚓P(guān)系,book表會(huì)新增字段,所以直接重新生成數(shù)據(jù)庫就會(huì)報(bào)錯(cuò),

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

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

就可以在全局找到,

不加引號(hào),就要把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 作為一個(gè)外鍵 與Book 表建立一對多關(guān)系,默認(rèn)綁定到Book 的主鍵id上
  publish = models.ForeignKey(Publish,)

然后生成數(shù)據(jù)庫,注意:如果book表中有數(shù)據(jù),直接生成數(shù)據(jù),就會(huì)報(bào)錯(cuò),因?yàn)閎ook表會(huì)新增一個(gè)author_id 字段,而原來的book表中的數(shù)據(jù)沒有改字段,所以會(huì)報(bào)錯(cuò),刪除book表中的數(shù)據(jù)

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

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

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

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

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

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

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

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

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

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

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

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

步驟1 ,先得到一個(gè)Book對象

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

步驟2 :獲取1個(gè)或2個(gè)以上author對象

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

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

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

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

===

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

#先獲取一個(gè)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)刪除,刪除一個(gè)對象,相關(guān)聯(lián)的一對多,多對多關(guān)系都會(huì)刪除,delte()

book_obj.delete()

----

manytomany 是django自己會(huì)生成第三張表,

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

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

class book2author(models.Model):

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    python使用matplotlib繪制柱狀圖教程

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

    Matplotlab顯示OpenCV讀取到的圖像

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

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

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

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

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

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

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

    Python使用ntplib庫同步校準(zhǔn)當(dāng)?shù)貢r(shí)間的方法

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

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

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

最新評論

高安市| 华阴市| 内江市| 平乡县| 盱眙县| 庐江县| 铜山县| 绥中县| 棋牌| 肃北| 闽清县| 商河县| 阿巴嘎旗| 农安县| 积石山| 古蔺县| 文成县| 大宁县| 华坪县| 德庆县| 和林格尔县| 延川县| 嘉兴市| 乌鲁木齐市| 司法| 玉林市| 和龙市| 桃园市| 鄱阳县| 弥勒县| 高阳县| 宁乡县| 达日县| 盱眙县| 铅山县| 贞丰县| 买车| 桦川县| 沾化县| 靖西县| 安顺市|