Django多對多操作

2021-09-29 02:16:49 字數 1824 閱讀 2248

模型

from django.db import models

# 老師

class

teacher

(models.model)

: name = models.charfield(max_length=32)

# 學生

class

student

(models.model)

: name = models.charfield(max_length=32)

teachers = models.manytomanyfield(to=

'teacher'

,on_delete=models.cascade)

查詢

# 通過老師查學生

teacher = teacher.objects.

filter(id

=1).first(

)students = teacher.student_set.

all(

)# 獲取所有學生資訊

# 通過學生查老師

student = student.objects.

filter(id

=2).first(

)teachers = student.teachers.

all(

)# 獲取所有老師的資訊

新增

# 學生選擇老師

t1 = teacher.objects.

filter(id

=1).first(

)t2 = teacher.objects.

filter(id

=2).first(

)t3 = teacher.objects.

filter(id

=3).first(

)s1 = student.objects.

filter(id

=4).first(

)s1.teacher.add(

*[t1,t2,t3]

)# 學生選擇了三個老師

# 老師選擇學生

s1 = student.objects.

filter(id

=4).first(

)s2 = student.objects.

filter(id

=5).first(

)t1.student_set.add(

*[s1,s2]

)# 老師選擇了兩個學生

清空

# 通過老師清空

t1 = teacher.objects.

filter(id

=1).first(

)t1.student.clear(

)# 通過學生清空

s1 = student.objects.

filter(id

=1).first(

)s1.teacher.clear(

)

刪除指定資料

t1 = teacher.objects.

filter(id

=1).first(

)s1 = student.objects.

filter(id

=1).first(

)# 以老師的角度刪除與學生之間的關係

t1.student_set.remove(s1)

# 以學生的角度刪除與老師之間的關係

s1.teacher.remove(t1)

Django多對多的建立

1.多對多建立的應用場景 在某錶中建立一行資料是,有乙個可以多選的下拉框 例如 建立使用者資訊,需要為使用者指定多個愛好 2.建立方式 方式一 自定義關係表,手動建立一張表用於關聯其他多張表的關係 class host models.model nid models.autofield primar...

Django學習 9 ORM多對多操作

建立多對多 方式一 自定義關係表 class host models.model nid models.autofield primary key true hostname models.charfield max length 32,db index true ip models.generic...

django 模型生成sql(多對多)

模型如下 class publisher models.model name models.charfield max length 30 address models.charfield max length 50 city models.charfield max length 60 state...