免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Django和外鍵有什么聯(lián)系嗎-創(chuàng)新互聯(lián)

這篇文章主要介紹“Django和外鍵有什么聯(lián)系嗎”,在日常操作中,相信很多人在Django和外鍵有什么聯(lián)系嗎問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Django和外鍵有什么聯(lián)系嗎”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)服務(wù)項目包括阿拉善盟網(wǎng)站建設(shè)、阿拉善盟網(wǎng)站制作、阿拉善盟網(wǎng)頁制作以及阿拉善盟網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,阿拉善盟網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到阿拉善盟省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

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

OneToManyField

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

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會在數(shù)據(jù)庫中創(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é)果就是一個商品會對應(yīng)一個類別,即類別是商品的外鍵。

OneToOneField

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

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)橐粚σ魂P(guān)系)

他們會使得數(shù)據(jù)庫創(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)很明顯了,在這兩個模型里,每個商品有一個商品類型,并且每個商品類型只屬于一個商品(用了UNIQUE約束),即如果我A商品的類型是電腦,那么其他商品的類型都不能定義為電腦了。

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

那么OneToOne用在哪里呢?這里說一個地方,在擴展Django的User模型時,因為系統(tǒng)自帶的字段不夠,所以一種最基本的擴展方法是定義一個User_profile表,用來作為用戶的擴展,那么一條用戶記錄只會有一個擴展表記錄,并且這個這個記錄也只屬于該用戶。

ManyToMany

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

我現(xiàn)在有一個商品表,這個商品有一些圖片(不定數(shù)量),那么可以使用多對多關(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ù)庫不同啦,建立了三張表,具體如下:

create table GoodsPicture(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Pic` varchar(255) NOT NULL, # Django對于圖片的保存采用的是二進制圖片文件存硬盤,數(shù)據(jù)庫只保存圖片路徑
  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`)
)

前兩個表就不講了,主要說一下第三個表GoodsMessage_CoodsPicture,

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

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

到此,關(guān)于“Django和外鍵有什么聯(lián)系嗎”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

當(dāng)前題目:Django和外鍵有什么聯(lián)系嗎-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://m.newbst.com/article44/dcgohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作做網(wǎng)站、網(wǎng)站維護、靜態(tài)網(wǎng)站響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)