django 3種數(shù)據(jù)關(guān)系的使用

OneToOneField 一對(duì)一關(guān)系

一對(duì)一就是薇组,兩張表數(shù)據(jù)通過(guò)唯一外鍵約束,舉個(gè)例子:如一個(gè)丈夫只有一個(gè)妻子坐儿。丈夫的外鍵就是妻子律胀,而這個(gè)外鍵是唯一的。
一對(duì)一的使用例子:

from django.db import models


# 妻子的數(shù)據(jù)模型
class Wife(models.Model):
 # 名字
 name = models.CharField(max_length=20)


# 丈夫的數(shù)據(jù)模型
class Husband(models.Model):
 # 名字
 name = models.CharField(max_length=20)
 # 定義一對(duì)一關(guān)系
 wife = models.OneToOne(Wife)

在django shell中測(cè)試:

>>> from demo.models import Wife, Husband
>>> 
>>> w = Wife(name='小花')   # 創(chuàng)建wife對(duì)象
>>> w.save()  # 保存到數(shù)據(jù)庫(kù)
>>>
>>> h = Hsband(name='老王', wife=w)  # 創(chuàng)建hsband對(duì)象
>>> h.save()  # 保存到數(shù)據(jù)庫(kù)
>>>
>>> h.wife.name  # 一對(duì)一關(guān)系直接訪問(wèn)關(guān)系對(duì)象貌矿,看一下老王h 的妻子的名字 
>>> '小花'
>>> w.hsband.name  # 看一下小花的丈夫
>>> '老王'

ForeignKey 一對(duì)多關(guān)系

多對(duì)多關(guān)系炭菌,數(shù)據(jù)庫(kù)中兩張表通過(guò)外鍵約束,多的一方添加外鍵逛漫。舉例:一個(gè)作者可以有多篇文章黑低,文章外鍵對(duì)應(yīng)作者。這是一個(gè)典型的一對(duì)多案例酌毡。
使用例子:

from django.db import models


# 創(chuàng)建作者模型
class Author(models.Model):
  name =models.CharField(max_length=20)


# 創(chuàng)建文章模型
class Book(models.Model):
  # 名字
  name = models.CharField(max_length=20)
  # 一對(duì)多 一個(gè)作者對(duì)應(yīng)多本書
  # on_delete = models.CASCADE 當(dāng)作者被刪除對(duì)應(yīng)的BOOK也會(huì)刪除
  author = models.ForeignKey(Author, on_delete=models.CASCADE)

django shell 測(cè)試:

>>> from medo.models import Author, Book
>>>
>>> a = Author(name='天蠶')  # 作者
>>> a.save()
>>> b1 = Book(name='大主宰', author=a) 
>>> b1.save()
>>> b2 = Book(name='舞動(dòng)', author=a)
>>> b2.save()
>>> 
>>> books = a.book_set.all()  # 查詢a作者的所有書
>>> for book in books:  # 遍歷拿到單本書對(duì)象投储,打印書名
...print(book.name)
>>> '大主宰'
>>> '舞動(dòng)'
>>> 
>>> b1.author.name  # 直接通過(guò)書查詢作者
>>> '天蠶'

ManyToManyField多對(duì)多

多對(duì)多通過(guò)數(shù)據(jù)庫(kù)的第三張表將對(duì)應(yīng)的其他兩張表的主鍵聯(lián)系在一起第练。多對(duì)多的舉例,如一個(gè)老師可以教多個(gè)班級(jí)玛荞,一個(gè)班級(jí)可以有多個(gè)老師娇掏。
使用例子:

from django.db import models


# 定義老師模型
class Teacher(models.Model):
  name = models.CharField(max_length=20)
  
# 定義班級(jí)模型
class Class(models.Model):
  name = models.CharField(max_length=20)
  teachers = models.ManyToManyField(Teacher)

shell 環(huán)境操作:

>>> from medo.models import Teacher, Class
>>>
>>> t1 = Teacher(name='老王')  # 老師
>>> t2 = Teacher(name='老郭')
>>> t3 = Teacher(name='老劉')
>>>
>>> t1.save()
>>> t2.save()
>>> t3.save()
>>>
>>> c1 = Class(name='一班')  # 班級(jí) 定義時(shí)先不要添加 約束對(duì)象
>>> c2 = Class(name='二班')
>>> c1.save()
>>> c2.save()
>>> c1.teachers.add(t1)  # 往一班添加一個(gè)老師 t1
>>> c1.teachers.add(t2)  # 再次添加老師 t2  
>>>
>>> c2.teachers.add(t1)  # 往二班添加一個(gè)老師 t1
>>> c2.teachers.add(t2)  # 往二班添加一個(gè)老師 t2
>>> c2.teachers.add(t3)  # 往二班添加一個(gè)老師 t3
>>> 
>>> c2t = c2.teachers.all()  # 查詢c2班的所有老師
>>> for t in c2t:  # 遍歷打印
... print(t.name)
>>> '老王'
>>> '老劉'
>>> '老郭'
>>> 
>>> cls = t1.class_set.all()  # 老王的班級(jí)
>>> for c in cls:
... print(c.name)
>>> '一班'
>>> '二班'
>>>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市勋眯,隨后出現(xiàn)的幾起案子婴梧,更是在濱河造成了極大的恐慌,老刑警劉巖客蹋,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塞蹭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讶坯,警方通過(guò)查閱死者的電腦和手機(jī)番电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辆琅,“玉大人漱办,你說(shuō)我怎么就攤上這事⊥裱蹋” “怎么了娩井?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)似袁。 經(jīng)常有香客問(wèn)我洞辣,道長(zhǎng),這世上最難降的妖魔是什么昙衅? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任扬霜,我火速辦了婚禮,結(jié)果婚禮上而涉,老公的妹妹穿的比我還像新娘畜挥。我一直安慰自己,他們只是感情好婴谱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布蟹但。 她就那樣靜靜地躺著,像睡著了一般谭羔。 火紅的嫁衣襯著肌膚如雪华糖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天瘟裸,我揣著相機(jī)與錄音客叉,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兼搏,可吹牛的內(nèi)容都是我干的卵慰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼佛呻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裳朋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吓著,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鲤嫡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绑莺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暖眼,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年纺裁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诫肠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欺缘,死狀恐怖栋豫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浪南,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布漱受,位于F島的核電站络凿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏昂羡。R本人自食惡果不足惜絮记,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虐先。 院中可真熱鬧怨愤,春花似錦、人聲如沸蛹批。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腐芍。三九已至差导,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猪勇,已是汗流浹背设褐。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人助析。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓犀被,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親外冀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寡键,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容