Django 十三 續 多對多關係表的操作

2021-10-03 14:21:34 字數 1889 閱讀 6030

之前我們建立了表中course表和studen表是多對多關係的,並且多對多關係的建立我們寫在了student表中,下面要對django給他們自動生成的中間表進行操作

正向

s1 = student.objects.get(s_id=5)

c1 = course.objects.get(c_id=1)

s1.course.add(c1)

反向

s1 = student.objects.get(s_id=5)

c1 = course.objects.get(c_id=1)

c1.student_set.add(s1)

刪除學號為1的學生選修的的課程號為2的課

s1 = student.objects.get(s_id=1)

c2 = course.objects.get(c_id=2)

s1.course.remove(c2)

刪除學號為1的學生選修的的所有課程

s1 = student.objects.get(s_id=1)

s1.course.clear(

)

舉例

# 查詢id為5的學生報名了哪些課程

course.objects.

filter

(student__s_id=5)

# 查詢python課程被哪些同學報名了

student.objects.

filter

(course__c_name=

'python'

)# 查詢id為1的課程被哪些同學報名了

student.objects.

filter

(course__c_id=1)

# 查詢溫州大學裡面小於19歲的學生

student.objects.

filter

(department__d_name=

'溫州大學'

,stu_detail__s_age__lt=20)

# 查詢報名了python課程的學生的所屬學院資訊

'''這裡的學院表和課程表沒有直接的聯絡,所以需要通過學生表來查詢'''

department.objects.

filter

(student__course__c_name=

'python'

)

指定當前表裡的字段資訊

注: only的作用 相當於select id from department

d1 = department.objects.

filter

(d_id=1)

.only(

'd_id'

).first(

) s1 = d1.student_set.

all(

)for i in s1:

print

(i)

如果department.objects.all()會在很多地方引用到,可以分開來寫

d1 = department.objects.

all(

) d2 = d1.

filter

(d_id=1)

d2.first(

)

多對多關係

實體模型中相關的模型之間為了方便查詢需要做到你中有我 我中有你 一對多表設計上是在多方應用少方的主鍵作為外來鍵約束 模型上需要在多方加入乙個少方模型物件的屬性,在少方加入乙個多方物件的列表 語法 少方物件 db.relationship 少方模型名 backref db.backref xxlist...

Flask sqlalchemy多對多關係

from flask import flask from flask sqlalchemy import sqlalchemy article tag db.table article tag db.column article id db.integer,db.foreignkey article...

多對多關係對映

需要用到 manytomany註解,然後在需要維護關係的一方,加上 jointable註解。必須指定乙個維護關係,否則會導致關係表id重複出現錯誤。jointable 有以下屬性,joincolumns 設定該實體類對映在關係表中的外來鍵列名和參照列,inversecolumns 設定和該實體類關聯...