亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

广饶县| 老河口市| 宣恩县| 凌海市| 瑞金市| 桐柏县| 广平县| 阿巴嘎旗| 晋宁县| 三台县| 田林县| 霸州市| 育儿| 大理市| 鄂州市| 岑巩县| 达日县| 云南省| 水富县| 沽源县| 吉木乃县| 通河县| 陵川县| 凌源市| 建水县| 鹰潭市| 新建县| 康平县| 温宿县| 遂溪县| 汤阴县| 孝义市| 金阳县| 玉山县| 宜兰市| 璧山县| 东乌珠穆沁旗| 绵阳市| 格尔木市| 阜阳市| 买车|