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)
當然其他還有許多應用,
甚至還有一對多,一對一關係,
請待下回分解,
這裡是不及格研究室,
今天的主題是:
沒有留言:
張貼留言