亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

OneToManyField

這種最好理解,說白了就是最普通的外鍵,看看下面兩個(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會在數(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é)果就是一個(gè)商品會對應(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)橐粚σ魂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)很明顯了,在這兩個(gè)模型里,每個(gè)商品有一個(gè)商品類型,并且每個(gè)商品類型只屬于一個(gè)商品(用了UNIQUE約束),即如果我A商品的類型是電腦,那么其他商品的類型都不能定義為電腦了。

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

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

ManyToMany

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

我現(xiàn)在有一個(gè)商品表,這個(gè)商品有一些圖片(不定數(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對于圖片的保存采用的是二進(jìn)制圖片文件存硬盤,數(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`)
) 

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

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

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

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

基于Django ORM、一對一、一對多、多對多的全面講解

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

相關(guān)文章

  • 利用python微信庫itchat實(shí)現(xiàn)微信自動回復(fù)功能

    利用python微信庫itchat實(shí)現(xiàn)微信自動回復(fù)功能

    最近發(fā)現(xiàn)了一個(gè)特別好玩的Python 微信庫itchat,可以實(shí)現(xiàn)自動回復(fù)等多種功能,下面這篇文章主要給大家介紹了利用python微信庫itchat實(shí)現(xiàn)微信自動回復(fù)功能的相關(guān)資料,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-05-05
  • python實(shí)現(xiàn)車輛跟隨滑??刂频膶?shí)例

    python實(shí)現(xiàn)車輛跟隨滑??刂频膶?shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)車輛跟隨滑模控制,采用指數(shù)趨近律、等速趨近律、準(zhǔn)滑??刂频姆椒ㄍ瓿绍囕v跟隨問題的仿真,運(yùn)行結(jié)果以圖片形式保存在同目錄下,需要的朋友可以參考下
    2022-05-05
  • 如何查看Mac本機(jī)的Python3安裝路徑

    如何查看Mac本機(jī)的Python3安裝路徑

    這篇文章主要介紹了如何查看Mac本機(jī)的Python3安裝路徑問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式

    matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式

    這篇文章主要介紹了matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python抓取網(wǎng)頁時(shí)字符集轉(zhuǎn)換問題處理方案分享

    python抓取網(wǎng)頁時(shí)字符集轉(zhuǎn)換問題處理方案分享

    python學(xué)習(xí)過程中發(fā)現(xiàn)英文不好學(xué)起來挺困難的,其中小弟就遇到一個(gè)十分蛋疼的問題,百度了半天就沒找到解決辦法~囧~摸索了半天自己解決了,記錄下來與君共勉。
    2014-06-06
  • Python列表的定義及使用

    Python列表的定義及使用

    這篇文章主要介紹了Python列表的定義及使用,在Python中,列表是由一系列元素按照特定的順序構(gòu)成的數(shù)據(jù)結(jié)構(gòu),也就是說列表類型的變量可以存儲多個(gè)數(shù)據(jù),且可以重復(fù),下面一起進(jìn)入文章學(xué)習(xí)學(xué)習(xí)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • python用字典統(tǒng)計(jì)單詞或漢字詞個(gè)數(shù)示例

    python用字典統(tǒng)計(jì)單詞或漢字詞個(gè)數(shù)示例

    這篇文章主要介紹了python用字典統(tǒng)計(jì)單詞或漢字詞個(gè)數(shù)示例,需要的朋友可以參考下
    2014-04-04
  • 各種Python庫安裝包下載地址與安裝過程詳細(xì)介紹(Windows版)

    各種Python庫安裝包下載地址與安裝過程詳細(xì)介紹(Windows版)

    這篇文章主要介紹了Windows版的各種Python庫安裝包下載地址與安裝過程詳細(xì)介紹,本文給大家提供了windows版的各種Python庫安裝包下載地址等相關(guān)知識,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • python庫skimage給灰度圖像染色的方法示例

    python庫skimage給灰度圖像染色的方法示例

    這篇文章主要介紹了python庫skimage給灰度圖像染色的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡單查詢實(shí)例

    Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡單查詢實(shí)例

    這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡單查詢實(shí)例,簡明入門教程,需要的朋友可以參考下
    2014-06-06

最新評論