程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

django--ORM表的多對一關系

編輯:Python
  • 多對一關系是什麼

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

ForeignKey需要一個位置參數:與該模型關聯的類

 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="學生分數")
     # to:後邊寫所關聯的模型類  
     # on_delete=models.CASCADE:主表中數據刪除,從表也刪除
     # 外鍵關聯的是整個模型類,不是單獨的某一個對象
     # 但是通過模型類會產生一個相關聯的字段 字段名_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代表一共刪除的數據個數 Student刪除3條 Teacher刪除1
 修改老師語法:
     模型類.objects.filter(條件).update()
  # 修改id為3的老師性別為女
  Teacher.objects.filter(id=3).update(gender="女")

以上創建了兩條老師數據 由於我們設置外鍵關聯可以為空null=True,所以此時在班級表創建時,可以直接保存,不需要提供老師數據

 添加學生語法:
     模型類.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="張三")

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

  • 多對一的正向查詢

將老師分配個班級之後,由於班級表關聯了老師字段,我們可以通過班級找到對應老師 雖然老師表中沒有關聯班級字段,

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

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

通過模型類名稱後追加一個_set,來實現反向查詢

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved