Django
關系表的數據操作
在views中導入modles模型中的,Django7中創建的模型
from .models import Department, Student, Stu_Detail, Course
先給Department添加數據
def doo(request): # department添加數據 d1 = Department(d_name='計算機').save() Department.objects.get_or_create(d_name='外國語') Department.objects.create(d_name='電子') d4 = Department(d_name='美術').save() return HttpResponse('添加數據成功')
、
一對多的數據添加
Student添加數據
方法一:
# Student添加數據、方法一:直接添加 Student.objects.get_or_create(s_name='小明', department_id=1) s2 = Student(s_name='小紅', department_id=2).save()
方法二:
# 方法二查找后添加 d4 = Department.objects.get(d_name='美術') s3 = Student(s_name='小美') s3.department = d4 s3.save() d3 = Department.objects.get(d_id=3) # 電子 s3 = Student(s_name='小草') s3.department = d3 s3.save()

- 1.第一種方式就是跟之前的一樣,用傳參的方法添加,需要注意的是外鍵的值必須是關聯表中已經存在的值.
- 2.第二種方式是用的屬性賦值的方式,因為我們在模型類有定義了一個department的屬性,而這個屬性的對象的類型必須是department表的類實例對象
在學生表和學院表之間進行關聯對象的訪問
這里我們通過python manage.py shell 來進行
先導入數據模型

通過s1的學院信息

Student的模型類中我們有定義department的屬性,所以當我們去訪問的時候,可以直接通過student.department的形式去找到某個學生的所屬學院是哪個.
查看一個d1學院的所有學生 ()
如果模型I有一個ForeignKey,那么該ForeignKey 所指的模型II實例可以通過一個管理器回前面有ForeignKey的模型I的所有實例。默認情況下,這個管理器的名字為foo_set,其中foo 是源模型的小寫名稱。
主鍵查看外鍵用_set.all()

可以在定義時設置related_name 參數來覆蓋foo_set 的名稱.
添加了related_name的參數后,重新打開一個IDLE,
訪問時就能直接用設置的參數作為屬性了.
這樣使用_set的地方就可以用related_time來替換

現在給Course添加數據

在學生表中再添加一些數據:

現在再來查詢一下學院1的所有學生

處理關聯對象的方法
- add(obj1, obj2, ...) 添加的已經存在數據庫的數據
- 添加一指定的模型對象到關聯的對象集中。

注意Course的多對多屬性student,現在
使學生1選擇了課程1


使學生5選擇了課程3


現在把再學院2的王五換到學院3



學院4來了個新同學小雅


- 從關聯的對象集中刪除指定的模型對象。
- 刪除的是關系表中的數據
首先先添加一些數據




注意對於所有類型的關聯字段,add()、create()、remove()和clear()都會馬上更新數據庫。換句話說,在關聯的任何一端,都不需要再調用save()方法。
Django 提供一種強大而又直觀的方式來“處理”查詢中的關聯關系,它在后台自動幫你處理JOIN。
若要跨越關聯關系,只需使用關聯的模型字段的名稱,並使用雙下划線分隔,直至你想要的字段:
查詢學院名字為‘計算機學院’的學生的信息
# 查詢學院名字為‘計算機’的學生的信息 res = Student.objects.filter(department__d_name='計算機')

查詢學生名字中包含 '小' 的學生的學院信息
# 查詢學生名字中包含 '小' 的學生的學院信息 res = Department.objects.filter(student__s_name__contains='小')


查詢學號為1的學生所有的課程
# 查詢學號為1的學生所有的課程 res = Course.objects.filter(student__s_id=1)

查詢報了課程1的所有的學生
# 查詢報了課程1的所有的學生 res = Student.objects.filter(course__c_id=1)

查詢報了'python'課程的的學生的所屬學院的信息
# 查詢報了'python'課程的的學生的所屬學院的信息 res = Department.objects.filter(student__course__name='python')



from django.db.models import Q, F



