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

對(duì)Django外鍵關(guān)系的描述

 更新時(shí)間:2019年07月26日 10:28:19   作者:嵐漾憶雨  
今天小編就為大家分享一篇對(duì)Django外鍵關(guān)系的描述,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

注:本文需要你有一定的數(shù)據(jù)庫(kù)知識(shí),本文的數(shù)據(jù)庫(kù)語(yǔ)法使用mysql書寫

Django中,跟外鍵有關(guān)的關(guān)系有三種,下面來(lái)一一介紹。

OneToManyField

這種最好理解,說(shuō)白了就是最普通的外鍵,看看下面兩個(gè)模型:

class GoodsType(models.Model):
  name = models.CharField(max_length=50)

class GoodsMessage(models.Model):
  Title = models.CharField(max_length='100') # 商品標(biāo)題
  Category = models.ManyToManyField(GoodsType) # 商品標(biāo)簽

分析一下:

這里Django會(huì)在數(shù)據(jù)庫(kù)中創(chuàng)兩張表:

create table GoodsType(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

create table GoodsMessage(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Title` varchar(50) NOT NULL,
  `Category_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`Category_id`) REFERENCES `SchoolBuy_goodstype` (`id`)
)

這樣的結(jié)果就是一個(gè)商品會(huì)對(duì)應(yīng)一個(gè)類別,即類別是商品的外鍵。

OneToOneField

這種關(guān)系和OneToMany類似,是一種有約束的外鍵,看看下面兩個(gè)模型:

class GoodsType(models.Model):
  name = models.CharField(max_length=50)

class GoodsMessage(models.Model):
  Title = models.CharField(max_length='100') # 商品標(biāo)題
  Category = models.OneToManyField(GoodsType) # 商品標(biāo)簽 (變?yōu)橐粚?duì)一關(guān)系)

他們會(huì)使得數(shù)據(jù)庫(kù)創(chuàng)建什么表呢?

create table GoodsType(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

create table GoodsMessage(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Title` varchar(50) NOT NULL,
  `Category_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`Category_id`) REFERENCES `SchoolBuy_goodstype` (`id`),
  UNIQUE KEY `SchoolBuy_goodsmessage_Category_id_4dd415fc1e19cf24_uniq` (`Category_id`) # 新增
)

那么這里已經(jīng)很明顯了,在這兩個(gè)模型里,每個(gè)商品有一個(gè)商品類型,并且每個(gè)商品類型只屬于一個(gè)商品(用了UNIQUE約束),即如果我A商品的類型是電腦,那么其他商品的類型都不能定義為電腦了。

所以商品與類型的對(duì)應(yīng)關(guān)系肯定不能是OneToOne,而應(yīng)該是OneToMany。

那么OneToOne用在哪里呢?這里說(shuō)一個(gè)地方,在擴(kuò)展Django的User模型時(shí),因?yàn)橄到y(tǒng)自帶的字段不夠,所以一種最基本的擴(kuò)展方法是定義一個(gè)User_profile表,用來(lái)作為用戶的擴(kuò)展,那么一條用戶記錄只會(huì)有一個(gè)擴(kuò)展表記錄,并且這個(gè)這個(gè)記錄也只屬于該用戶。

ManyToMany

多對(duì)多關(guān)系,這里我們假設(shè)一種情景:

我現(xiàn)在有一個(gè)商品表,這個(gè)商品有一些圖片(不定數(shù)量),那么可以使用多對(duì)多關(guān)系:

class GoodsPicture(models.Model):
  Pic = models.ImageField(upload_to='pic/')

class GoodsMessage(models.Model):
  Title = models.CharField(max_length='100') # 商品標(biāo)題
  Pic = models.ManyToManyField(GoodsPicture)

這里數(shù)據(jù)庫(kù)不同啦,建立了三張表,具體如下:

create table GoodsPicture(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Pic` varchar(255) NOT NULL, # Django對(duì)于圖片的保存采用的是二進(jìn)制圖片文件存硬盤,數(shù)據(jù)庫(kù)只保存圖片路徑
  PRIMARY KEY (`id`)
)

create table GoodsMessage(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Title` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
  # 注意了,這里沒有外鍵約束了
)

create table GoodsMessage_CoodsPicture(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `goodsmessage_id` int(11) NOT NULL,
  `goodpicture_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `goodsmessage_id` (`goodsmessage_id`,`goodspicture_id`),
  FOREIGN KEY (`goodsmessage_id`) REFERENCES `GoodsMessage` (`id`),
  FOREIGN KEY (`goodstype_id`) REFERENCES `GoodsPicture` (`id`)
) 

前兩個(gè)表就不講了,主要說(shuō)一下第三個(gè)表GoodsMessage_CoodsPicture,

Django用這個(gè)表來(lái)記錄一條數(shù)據(jù),內(nèi)容為:某個(gè)商品對(duì)應(yīng)某張圖片。其中有一個(gè)UNIQUE約束,說(shuō)明不能有重復(fù)的記錄。

這樣,每次查詢GoodsMessage_CoodsPicture表,就能獲得某件商品對(duì)應(yīng)的圖片。

這里講了他們?cè)跀?shù)據(jù)庫(kù)中的實(shí)現(xiàn),那么Django如何來(lái)查詢這些數(shù)據(jù)呢,有一篇好的博文推薦給大家:

基于Django ORM、一對(duì)一、一對(duì)多、多對(duì)多的全面講解

以上這篇對(duì)Django外鍵關(guān)系的描述就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入探討Python中弱引用機(jī)制與應(yīng)用

    深入探討Python中弱引用機(jī)制與應(yīng)用

    在Python編程中,弱引用(Weak Reference)是一種特殊的引用方式,本文將深入探討Python的弱引用機(jī)制,介紹其用法、原理及實(shí)際應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助
    2024-03-03
  • Python 3 判斷2個(gè)字典相同

    Python 3 判斷2個(gè)字典相同

    這篇文章主要介紹了Python 3 判斷2個(gè)字典相同,文中給大家提到了Python3 查找兩字典的相同點(diǎn)問(wèn)題及解決方法,需要的朋友可以參考下
    2019-08-08
  • Python描述器descriptor詳解

    Python描述器descriptor詳解

    這篇文章主要向我們?cè)敿?xì)介紹了Python描述器descriptor,需要的朋友可以參考下
    2015-02-02
  • Python的另外幾種語(yǔ)言實(shí)現(xiàn)

    Python的另外幾種語(yǔ)言實(shí)現(xiàn)

    這篇文章主要介紹了Python的另外幾種語(yǔ)言實(shí)現(xiàn),本文介紹了CPython、Jython、Python for .NET、PyPy、Stackless等其它幾種語(yǔ)言實(shí)現(xiàn)的Python,需要的朋友可以參考下
    2015-01-01
  • python取均勻不重復(fù)的隨機(jī)數(shù)方式

    python取均勻不重復(fù)的隨機(jī)數(shù)方式

    今天小編就為大家分享一篇python取均勻不重復(fù)的隨機(jī)數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    基于Python實(shí)現(xiàn)一個(gè)圖片壓縮工具

    圖片壓縮是在保持圖像質(zhì)量的同時(shí)減小圖像文件大小的過(guò)程,本文將學(xué)習(xí)如何使用Python來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單但功能強(qiáng)大的圖片壓縮工具,以及如何在不同情境下進(jìn)行圖片壓縮,希望對(duì)大家有所幫助
    2024-01-01
  • Django實(shí)現(xiàn)文件分享系統(tǒng)的完整代碼

    Django實(shí)現(xiàn)文件分享系統(tǒng)的完整代碼

    這篇文章主要介紹了Django實(shí)現(xiàn)文件分享系統(tǒng),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn)

    django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn)

    這篇文章主要介紹了django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python 寫的一個(gè)爬蟲程序源碼

    python 寫的一個(gè)爬蟲程序源碼

    這篇文章主要介紹了python 寫的一個(gè)爬蟲程序源碼,需要的朋友可以參考下
    2016-02-02
  • 解決python

    解決python "No module named pip"的問(wèn)題

    今天小編就為大家分享一篇解決python "No module named pip"的問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論

桓仁| 昆明市| 柏乡县| 朝阳区| 祥云县| 英超| 渝北区| 郁南县| 井陉县| 湘乡市| 伊宁县| 五大连池市| 富民县| 兴化市| 平乐县| 会理县| 邵阳市| 钟山县| 深水埗区| 阳江市| 南城县| 广宗县| 洪洞县| 白山市| 永清县| 商丘市| 瓮安县| 吉木萨尔县| 喜德县| 界首市| 营口市| 南京市| 西畴县| 九寨沟县| 辽阳市| 福建省| 礼泉县| 南安市| 资溪县| 鹰潭市| 威信县|