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()