django--ORM表的多對一關(guān)系

  • 多對一關(guān)系是什么

Django使用django.db.models.ForeignKey定義多對一關(guān)系。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、潯陽網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

ForeignKey需要一個位置參數(shù):與該模型關(guān)聯(lián)的類

class Info(models.Model):
user = models.ForeignKey(other_model,on_delete=models.SET_NULL)

生活中的多對一關(guān)系:班主任,班級關(guān)系。一個班主任可以帶很多班級,但是每個班級只能有一個班主任

from django.db import models
# id name gender 定義老師的模型類
class Teacher(models.Model):
name = models.CharField(max_length=30,verbose_name="老師姓名")
gender = models.CharField(max_length=10,verbose_name="老師性別")
class Meta:
db_table = "teachers"
def __str__(self):
return self.name
# id name gender score teacher_id
class Student(models.Model):
name = models.CharField(max_length=20,verbose_name="學(xué)生姓名")
gender = models.CharField(max_length=10,verbose_name="學(xué)生性別")
score = models.IntegerField(verbose_name="學(xué)生分?jǐn)?shù)")
# to:后邊寫所關(guān)聯(lián)的模型類
# on_delete=models.CASCADE:主表中數(shù)據(jù)刪除,從表也刪除
# 外鍵關(guān)聯(lián)的是整個模型類,不是單獨(dú)的某一個對象
# 但是通過模型類會產(chǎn)生一個相關(guān)聯(lián)的字段 字段名_id
teacher = models.ForeignKey(to=Teacher,on_delete=models.CASCADE,verbose_name="所屬老師")
class Meta:
db_table = "students"
def __str__(self):
return self.name
  • 多對一關(guān)系的增刪改操作

添加老師語法:
模型類.objects.create()
Teacher.objects.create(name="王老師",gender="女")
刪除老師語法:
模型類.objects.get(條件).delete()
# 刪除id為2的老師
Teacher.objects.get(id=2).delete() # (3, {'myapp.Student': 2, 'myapp.Teacher': 1})
   # 3代表一共刪除的數(shù)據(jù)個數(shù) Student刪除3條 Teacher刪除1
修改老師語法:
模型類.objects.filter(條件).update()
# 修改id為3的老師性別為女
Teacher.objects.filter(id=3).update(gender="女")

以上創(chuàng)建了兩條老師數(shù)據(jù)由于我們設(shè)置外鍵關(guān)聯(lián)可以為空null=True,所以此時在班級表創(chuàng)建時,可以直接保存,不需要提供老師數(shù)據(jù)

添加學(xué)生語法:
模型類.objects.create()
通過外鍵_id的形式來添加
Student.objects.create(name="李四",gender="男",score=80,teacher_id=3)
直接給外鍵賦值一個老師對象
t1 = Teacher.objects.create(name="李老師",gender="男")
Student.objects.create(name="李四",gender="男",score=80,teacher=t1)
刪除學(xué)生語法:
模型類.objects.get(條件).delete()
Student.objects.get(id=1).delete()
修改學(xué)生語法:
模型類.objects.filter(條件).update(字段1,字段2...)
Student.objects.get(id=1).update(name="張三")

注意要記得刪除之后要重新獲取一次數(shù)據(jù),否則查看到的結(jié)果中還是之前獲取到的有老師的班級數(shù)據(jù)

  • 多對一的正向查詢

將老師分配個班級之后,由于班級表關(guān)聯(lián)了老師字段,我們可以通過班級找到對應(yīng)老師雖然老師表中沒有關(guān)聯(lián)班級字段,

但是也可以通過老師找到他所帶的班級,這種查詢方式也叫作關(guān)聯(lián)查詢

# 查詢id為2的學(xué)生的老師姓名
--找到id為2的學(xué)生
stu = Student.objects.get(id=2)
--找到stu對應(yīng)的老師 stu.teacher.name
stu.外鍵.name
  • 多對一的反向查詢

通過模型類名稱后追加一個_set,來實現(xiàn)反向查詢

反向查詢:通過django的內(nèi)置屬性來進(jìn)行查詢 模型類(模型類小寫)_set()可以反向查詢老師名下的所有學(xué)生,
# 查詢id為1的老師的所有學(xué)生 --先找到id為1的老師
tea = Teacher.objects.get(id=1)
--查詢tea老師名下的所有學(xué)生 老師對象.模型類_set.all()
tea.student_set.all()

網(wǎng)頁名稱:django--ORM表的多對一關(guān)系
URL分享:http://m.kartarina.com/article48/dsogghp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司網(wǎng)站制作ChatGPT微信小程序企業(yè)建站微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
主站蜘蛛池模板: 亚洲精品无码av天堂| 国产成人无码精品久久久性色| 水蜜桃av无码一区二区| 国产精品亚洲а∨无码播放| 小13箩利洗澡无码视频网站| 亚洲国产精品无码久久久秋霞1| 国产精品99无码一区二区| 日韩亚洲AV无码一区二区不卡| 久久久久亚洲精品无码网址色欲| 国精品无码一区二区三区在线| 亚洲精品无码一区二区| 东京热人妻无码一区二区av| 精品久久久久久久无码久中文字幕| 熟妇人妻系列aⅴ无码专区友真希| 亚洲欧洲无码一区二区三区| 无码一区二区三区免费| 国产自无码视频在线观看| 日韩放荡少妇无码视频| 亚洲Av无码一区二区二三区 | 人妻丰满熟妇A v无码区不卡| 无码专区中文字幕无码| 国产精品无码a∨精品| 亚洲国产综合无码一区二区二三区 | 国产精品无码一区二区在线| 久久久久亚洲精品无码蜜桃| 高h纯肉无码视频在线观看| 精品无码一区二区三区水蜜桃| 无码爆乳护士让我爽| 日韩av无码久久精品免费| 水蜜桃av无码一区二区| 久久久久成人精品无码中文字幕| 无码人妻精品一区二区三| 亚洲AV无码一区二区乱孑伦AS | 国产成年无码久久久免费| 永久免费无码网站在线观看个| 日韩夜夜高潮夜夜爽无码| 无码av中文一区二区三区桃花岛| 精品人妻无码一区二区色欲产成人 | 国产亚洲美日韩AV中文字幕无码成人| 精品久久久久久无码人妻| 免费无码又爽又刺激高潮的视频|