Django_day03

Django

一掩蛤、一對一關(guān)系(在任意一方添加)

1.創(chuàng)建新表:

class StudentInfo(models.Model):
    tel = models.CharField(max_length=11, null=True, unique=True, verbose_name='手機(jī)號')
    address = models.CharField(max_length=50, null=True, verbose_name='住址')

    class Meta:
        db_table = 'student_info'

2.在Student2中添加一對一關(guān)系

class Student2(models.Model):
    s_name = models.CharField(max_length=10, unique=True, verbose_name='姓名')
    s_age = models.IntegerField(default=19, verbose_name='年齡')
    s_sex = models.BooleanField(default=1, verbose_name='性別')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='創(chuàng)建時(shí)間')
    operate_time = models.DateTimeField(auto_now=True, verbose_name='操作時(shí)間')
    math = models.DecimalField(max_digits=4, decimal_places=2, null=True)
    chinese = models.DecimalField(max_digits=4, decimal_places=2, null=True)

    # 一對一關(guān)系
    stu_info = models.OneToOneField(StudentInfo, null=True, related_name='stu')

stu_info是StudentInfo的別稱鸵鸥,stu是Student2的別稱,null=True表示外鍵可以為空窥浪。

3.向studentinfo表中插入數(shù)據(jù)

def create_stu_info(request):
    if request.method == 'GET':
        data = {
            '18200384770': '金牛區(qū)',
            '18200384771': '金牛區(qū)',
            '18200384772': '金牛區(qū)',
            '18200384773': '金牛區(qū)',
            '18200384774': '金牛區(qū)',
        }
        for k, v in data.items():
            StudentInfo.objects.create(tel=k, address=v)
        return HttpResponse('創(chuàng)建副表')
    if request.method == 'POST':
        pass

4.關(guān)聯(lián)表

def stu_add_stuinfo(request):
    if request.method == 'GET':
        # 給id為2的學(xué)生添加拓展表中id=2的信息,
        # stu = Student2.objects.get(id=2)
        # stu.stu_info_id = 2
        # stu.save()
        # 方法二
        stu = Student2.objects.get(id=6)
        stu.stu_info = StudentInfo.objects.get(id=1)
        stu.save()
        return HttpResponse('綁定學(xué)生和拓展表的關(guān)系')

stu是學(xué)生對象物臂,stu.stu_info = StudentInfo.objects.get(id=1)表示把id=6的學(xué)生和id=1的信息關(guān)聯(lián)起來。

5.查詢

def sel_tel_by_stu(request):
    if request.method == 'GET':
        # 獲取id為2的學(xué)生的手機(jī)號
        # 方法一
        # stu = Student2.objects.filter(id=2).first()
        # info_id = stu.stu_info_id
        # stu_info = StudentInfo.objects.get(pk=info_id)
        # 方法二
        # stu = Student2.objects.get(id=2)
        # stu_info = stu.stu_info
        # tel = stu_info.tel
        # print(tel)
        # 方法三
        stu = Student2.objects.get(id=2)
        print(stu.stu_info.tel)

        return HttpResponse('通過學(xué)生查找手機(jī)號')

反之

def sel_stu_by_tel(request):
    if request.method == 'GET':
        # 通過手機(jī)號查找學(xué)生
        stu_info = StudentInfo.objects.get(tel='18200384770')
        print(stu_info.stu.s_name)

        return HttpResponse('通過手機(jī)號查找學(xué)生')

二卒稳、一對多關(guān)系

1.創(chuàng)建表

class Grade(models.Model):
    g_name = models.CharField(max_length=10, unique=True, verbose_name='班級名稱')

    class Meta:
        db_table = 'grade'

2.添加一對多關(guān)系(在多的一方添加)

# 多對一關(guān)系
    g = models.ForeignKey(Grade, null=True, related_name='stu')

3.插入數(shù)據(jù)

def create_grade(request):
    if request.method == 'GET':
        g = Grade()
        g.g_name = 'RTX2080'
        g.save()

        return HttpResponse('創(chuàng)建班級')

4.添加關(guān)系(和一對一相同)
5.查詢

def sel_stu_by_grade(request):
    if request.method == 'GET':
        # 查詢python1805的學(xué)生蹋半,獲取姓名
        g = Grade.objects.get(g_name='python1805')
        stus_names = g.stu.values('s_name')
        print(stus_names)

        stu = Student2.objects.filter(s_name='jerry').first()
        grade = stu.g.g_name
        print(grade)

        return HttpResponse('根據(jù)班級查找學(xué)生')

三、多對多關(guān)系

1.創(chuàng)建表

class Course(models.Model):
    c_name = models.CharField(max_length=10, null=True)

    class Meta:
        db_table = 'course'

2.添加多對多關(guān)系(在任意一方添加)

# 多對多關(guān)系
    c = models.ManyToManyField(Course, null=True)

3.插入數(shù)據(jù)

def create_course(request):
    if request.method == 'GET':
        c = Course()
        c.c_name = 'python'
        c.save()

        return HttpResponse('創(chuàng)建課程')

4.添加關(guān)系

def create_stu_course(request):
    if request.method == 'GET':
        # 讓jerry選擇課程(python)
        # stu = Student2.objects.get(s_name='jerry')
        # 添加add方法
        # stu.c.add(1)

        # 添加java和id=4的學(xué)生的關(guān)聯(lián)關(guān)系
        c = Course.objects.get(c_name='java')
        c.student2_set.add(4)

        return HttpResponse('創(chuàng)建學(xué)生課程關(guān)聯(lián)')

5.查詢

def del_stu_course(request):
    if request.method == 'GET':
        # 刪除關(guān)聯(lián)
        c = Course.objects.get(c_name='java')
        c.student2_set.remove(4)

        return HttpResponse('刪除學(xué)生課程關(guān)聯(lián)')

總結(jié):
class C:
aOneToOneFieLd(A)
b = ForeignKey(B)
d = Many ToManyFiLed(D)

1.有c對象充坑,分別去查A, B, D的信息
C=C()
查詢a對象信息: c.a
查詢b對象信息: c.b.all()
查詢d對象信息: c.d.filter().aLL()

2.反向查詢减江。已知a, b, d對象查詢c對象信息
通過a查詢c對象信息: a.c
通過b查詢c對象信息: b.c_ set.filter().alL()
通過d查詢c對象信息: d.c_ set.all()

3.中間表加數(shù)據(jù)
c.d.add(d_ id)
c. d. remove(d id)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捻爷,隨后出現(xiàn)的幾起案子辈灼,更是在濱河造成了極大的恐慌,老刑警劉巖也榄,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巡莹,死亡現(xiàn)場離奇詭異,居然都是意外死亡甜紫,警方通過查閱死者的電腦和手機(jī)降宅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚霸,“玉大人腰根,你說我怎么就攤上這事⊥匦停” “怎么了额嘿?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劣挫。 經(jīng)常有香客問我册养,道長,這世上最難降的妖魔是什么压固? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任球拦,我火速辦了婚禮,結(jié)果婚禮上帐我,老公的妹妹穿的比我還像新娘坎炼。我一直安慰自己,他們只是感情好焚刚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扇调,像睡著了一般矿咕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天碳柱,我揣著相機(jī)與錄音捡絮,去河邊找鬼。 笑死莲镣,一個(gè)胖子當(dāng)著我的面吹牛福稳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瑞侮,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼的圆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了半火?” 一聲冷哼從身側(cè)響起越妈,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钮糖,沒想到半個(gè)月后梅掠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡店归,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年阎抒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片消痛。...
    茶點(diǎn)故事閱讀 37,989評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡且叁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肄满,到底是詐尸還是另有隱情谴古,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布稠歉,位于F島的核電站掰担,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怒炸。R本人自食惡果不足惜带饱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阅羹。 院中可真熱鬧勺疼,春花似錦、人聲如沸捏鱼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽导梆。三九已至轨淌,卻和暖如春迂烁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背递鹉。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工盟步, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躏结。 一個(gè)月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓却盘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媳拴。 傳聞我的和親對象是個(gè)殘疾皇子黄橘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評論 2 345

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

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,972評論 0 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法禀挫,內(nèi)部類的語法旬陡,繼承相關(guān)的語法,異常的語法语婴,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • 嗨描孟,你知道嗎? 在這個(gè)世界上有一個(gè)人 一直一直在等你 他喜歡黑色的披肩長發(fā) 他喜歡泛著光透著故事的眼睛 他喜歡帶點(diǎn)...
    Mr橘子閱讀 281評論 2 1
  • 寫作的原因: 回想當(dāng)初在網(wǎng)上看到有這類培訓(xùn)的時(shí)候廉羔,我眼前的世界突然明亮了許多。我毫不猶豫報(bào)了名僻造。這種決策力...
    特立獨(dú)行貓一只閱讀 198評論 0 0
  • 薦 語 當(dāng)我們還是嬰兒時(shí)憋他,我們學(xué)習(xí)走路、說話髓削,跌倒了竹挡、說錯(cuò)了,不會害怕和丟臉立膛。 后來揪罕,我們懂得了更多,反而怕這怕那...
    sanmange閱讀 848評論 0 1