中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django和外鍵有什么聯系嗎

發布時間:2021-09-06 11:47:07 來源:億速云 閱讀:104 作者:chen 欄目:開發技術

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

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

Django中,跟外鍵有關的關系有三種,下面來一一介紹。

OneToManyField

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

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

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

分析一下:

這里Django會在數據庫中創兩張表:

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`)
)

這樣的結果就是一個商品會對應一個類別,即類別是商品的外鍵。

OneToOneField

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

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

class GoodsMessage(models.Model):
  Title = models.CharField(max_length='100') # 商品標題
  Category = models.OneToManyField(GoodsType) # 商品標簽 (變為一對一關系)

他們會使得數據庫創建什么表呢?

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`) # 新增
)

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

所以商品與類型的對應關系肯定不能是OneToOne,而應該是OneToMany。

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

ManyToMany

多對多關系,這里我們假設一種情景:

我現在有一個商品表,這個商品有一些圖片(不定數量),那么可以使用多對多關系:

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

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

這里數據庫不同啦,建立了三張表,具體如下:

create table GoodsPicture(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Pic` varchar(255) NOT NULL, # Django對于圖片的保存采用的是二進制圖片文件存硬盤,數據庫只保存圖片路徑
  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用這個表來記錄一條數據,內容為:某個商品對應某張圖片。其中有一個UNIQUE約束,說明不能有重復的記錄。

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

到此,關于“Django和外鍵有什么聯系嗎”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 安顺市| 南涧| 中方县| 承德县| 那曲县| 莆田市| 渑池县| 安丘市| 平远县| 禹州市| 龙门县| 贵溪市| 盘山县| 台东县| 蒲城县| 交城县| 石屏县| 兰西县| 漾濞| 南昌市| 平利县| 佳木斯市| 平武县| 图片| 沂南县| 平舆县| 乌兰县| 婺源县| 柳州市| 栖霞市| 台前县| 济源市| 南昌县| 右玉县| 镇赉县| 宁海县| 微山县| 吉林市| 乌鲁木齐县| 西昌市|