確立するために、3番目のテーブルを作成して自分自身を対多の関係
テーブルを作成します。
#教師と生徒のテーブルテーブルは1対多の関係であってもよい、あなたは時にテーブルの構築手動で関連する第3のテーブルを作成することができます クラス:学生(models.Model) 名 = models.CharField(= MAX_LENGTH 32、ヌル = 真) 年齢を models.CharField =(= MAX_LENGTH 32、ヌル = TRUE) クラス教師(models.Model): 名前 = models.CharField(= MAX_LENGTH 32、ヌル = TRUE) 性別 = models.CharField(= MAX_LENGTH 32、ヌル = TRUE) #第3のテーブルの確立、2つのテーブルの関連付けの前に クラスTeacherToStudent(models.Model): STU= models.ForeignKey(' 学生'、ヌル = 真) TEAC = models.ForeignKey(' 先生'、ヌル =真)
CRUD操作
#モデルによって直接増やし。.Objects.createクラス名を加え models.Student.objects.createを(名 = " XXX "、年齢= 12 ) models.Teacher.objects.create(名 = " OOO "、性別= " Mを" ) models.TeacherToStudent.objects.create(stu_id = 1、teac_id = 1 ) #)は、(オブジェクトが.deleteを削除識別し、対応関係を削除 models.Teacher.objects.filter(IDは = 4 ).Deleteを( ) models.TeacherToStudent.objects.filter(teac_id = 4 ).Delete() #変更異なるテーブルを別々に操作として models.Teacher.objects.filter(IDを= 3).Updateは(名前= 「XOXO 」) #チェックは、私は同時に、教師の数を教えられる学生を求めていた場合、でチャートには3つの方法があります 。#1 : RES = models.Student.objects.filter(上記のid = 2 ).ALL()対象学生識別する# ための行にRES: プリント(row.name) R = row.teachertostudent_set.all()#(逆引き)テーブルは、ID 2列ですべての学生の3分の1を表す ため I におけるR: #1 i.teac位(Nチェック)の対応テーブル教師ことを示す すべての教師の印刷(i.teac.name)#は学生ID 2に対応する識別 #2 : RES = models.TeacherToStudent.objects .filter(stu__name = " のCaO" )。すべて() に対応する#すべての行の生徒の名前をチェックしてください(魔法の二重下線)曹操 のための行にRES: 印刷(row.stu.name、row.teac.name)#見つける生徒と教師対応 #3。 : RES = models.TeacherToStudent.objects.filter(stu__name = " 李").values(" teac__name " ) の辞書が含まれ#クエリセットチェックリスト、 プリントを(RES)
Djangoの方法は、多くの関係を作成するには
テーブルを作成します。
#クラスとコース対多の関係の作成、テーブルの作成 のManyToManyFieldでジャンゴによって作成された#1 -many関係を、フィールド上の2つの列は、のいずれかとすることができる クラス:クラス(models.Model) 名 =モデル。 CharFieldです(= MAX_LENGTHとして32、ヌル = TRUE) コース = models.ManyToManyField(' コース' ) クラスコース、(models.Model): 名前 = models.CharField(= MAX_LENGTH 32、ヌル = TRUE)
CRUD操作
#増加は、最初に対応するクラスまたはコースオブジェクトを見つけなければならない OBJ = models.Classes.objects.filter(ID = 4 )1次回() #後のテーブルの構造が見つかったときcourse.addを介して加え、リストIDにコースを取りますでパスを殴られた obj.course.add(1 )#追加 obj.course.add( * [ 2、3 ])#数の増加 #削除見つかったオブジェクトを。テーブルの構成は、()すべて削除するときの名前.clear属性 OBJ = models.Classes.objects.filter(ID = 4 )1次回() obj.course.clear() #リセット(変更)、オブジェクトがによって求められる。SET リストに置く()メソッド、 OBJ =モデル.Classes.objects.filter(ID = 3 )1次回() obj.course。SET([ 1、2、3]) モデルクラスのフィールドのManyToManyFieldているテーブルのための#チェック RES = すべてのオブジェクトを検出するmodels.Classes.objects.all()# のための行にRESを: 印刷(row.name) 用 I でrow.course .ALL():#1 row.course.all()は、すべてのプログラムがそれぞれ対応するクラスオブジェクトことである プリント(i.name) #1のManyToManyFieldをのためのテーブルモデルクラス・フィールドではない RES = (models.Course.objects.all )#は、すべてのオブジェクトを検出する最初である ため、行にRES: 印刷(「=================== 」) 印刷(row.name) のために私にrow.classes_set .ALL():#各専門分野に対応するすべてのクラス の印刷(i.name)
注:どちらの方法は、多くの関係が考えられる確立、考慮にシンプルで、テーブル間の関係であれば、ポイントを取って、
第三に、テーブル2つのテーブルを除くフィールドを追加したIDジャンゴで作成することができます。しかし必要としないテーブルの関係が複雑である場合には、
そして、3番目の表はまた、我々は我々のカスタム対多の関係を(使用する必要があり、他のいくつかのフィールドを追加する必要があります
手動で)第3のテーブルを作成し、構造は第3のテーブルをカスタマイズすることができます