真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

django--ORM表的多對一關系

  • 多對一關系是什么

Django使用django.db.models.ForeignKey定義多對一關系。

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

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

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

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

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="學生姓名")
gender = models.CharField(max_length=10,verbose_name="學生性別")
score = models.IntegerField(verbose_name="學生分數(shù)")
# to:后邊寫所關聯(lián)的模型類
# on_delete=models.CASCADE:主表中數(shù)據(jù)刪除,從表也刪除
# 外鍵關聯(lián)的是整個模型類,不是單獨的某一個對象
# 但是通過模型類會產(chǎ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
  • 多對一關系的增刪改操作

添加老師語法:
模型類.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ù)由于我們設置外鍵關聯(lián)可以為空null=True,所以此時在班級表創(chuàng)建時,可以直接保存,不需要提供老師數(shù)據(jù)

添加學生語法:
模型類.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)
刪除學生語法:
模型類.objects.get(條件).delete()
Student.objects.get(id=1).delete()
修改學生語法:
模型類.objects.filter(條件).update(字段1,字段2...)
Student.objects.get(id=1).update(name="張三")

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

  • 多對一的正向查詢

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

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

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

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

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

分享名稱:django--ORM表的多對一關系
分享網(wǎng)址:http://weahome.cn/article/dsogghp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部