2019年11月1日 星期五

Django 的多對多關係範例


Django ORM ( Object-relational mapping ) 提供了簡便的方法存取資料庫,

在資料庫模型中,

部分欄位是有相關性的,

在 Django 中分為一對一,多對多,一對多三種關係,

今天要來介紹的就是:

Django 的多對多關係範例

多對多關係的例子很多,

以書籍分類來說,

一本書可以有很多種分類,

而一個分類可以有很多書,

這就是屬於多對多關係,

舉個例子來說,

笑傲江湖在分類上屬於武俠小說類,

而武俠小說類除了笑傲江湖以外還有射鵰英雄傳...等等,

所以分類名與書名間就是多對多關係。


上圖為今天的範例,

課程與學生屬於多對多關係,

故在定義課程時,設定一個欄位為 ManyToManyField,

系統會自動建立一個中間表,


這個中間表定義了 User 與 Tcourse 間的關係,

至於兩者關係的處理方式,

可透過 add, remove, set, clear 等等,

來新增、刪除、設定、清除。


使用方式可分為正向查詢與反向查詢,

正向查詢的用法:

以上述例子為範例,

查詢修習課程 course 下的所有學生


alluser = Tcourse.objects.get(course_name='course').tstaff.all()


反向查詢:

查詢學生 xuser 修習的所有課程


allcourse = User.objects.get(username='xuser').tcourse_set.all()


至於多對多關係的建立,

可使用


Tcourse.objects.get(course_name='course').tstaff.add(tmp_user)


這邊指的是幫學生 tmp_user 加選課程名稱為 course 的課程

退選課程則使用:


Tcourse.objects.get(course_name='course').tstaff.remove(tmp_user)


當然其他還有許多應用,

甚至還有一對多,一對一關係,

請待下回分解,

這裡是不及格研究室,

今天的主題是:

Django 的多對多關係範例







沒有留言: