django---一對多和多對多欄位的操作訓練
阿新 • • 發佈:2018-11-09
建表準備:
django專案models.py建表
from django.db import models class Myclass(models.Model): cname = models.CharField(max_length=12) class Student(models.Model): sname = models.CharField(max_length=12) myclass=models.ForeignKey(to='Myclass') def __str__(self): return self.sname class Theacher(models.Model): tname = models.CharField(max_length=12) myclass = models.ManyToManyField(to='Myclass') def __str__(self): return self.tname
import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings") import django django.setup() from app01.models import Student,Myclass,Theacher #、查詢id=1的班級的所有的學生 #方法1.1、先獲取id=1的班級物件反向查詢學生物件 # print(Myclass.objects.get(id=1).student_set.all()) # 方法1.2、根據queryset物件反向查詢 # print(Myclass.objects.filter(id=1).values('student__sname')) #方法2、學生物件正向查詢班級id=1的學生 # print(Student.objects.filter(myclass__id=1)) #、查詢id=2的班級的所有老師 #反向查詢基於queryset和物件查詢 # print(Myclass.objects.filter(id=2).values('theacher__tname')) # print(Myclass.objects.get(id=2).theacher_set.all()) # #正向查詢 # print(Theacher.objects.filter(myclass__id=2)) #給id=2的班級新增一個id=6的學生,如果學生原本有班級則改成現在班級(學生只能對應一個班級) # print(Myclass.objects.get(id=2).student_set.add(Student.objects.get(id=6))) #把所有學生劃到1班去 # print(Myclass.objects.get(id=1).student_set.set(Student.objects.all())) #給id=2的老師新增一個班級 # Theacher.objects.get(id=2).myclass.add(*[2,3]) #把id=2的老師關聯的1班清空解除關聯關係 # Theacher.objects.get(id=2).myclass.remove(1) # 把id=2的老師關聯的班清空解除關聯關係 # Theacher.objects.get(id=2).myclass.clear() #id = 2的老師現在開設一新班級:PHP # Theacher.objects.get(id=2).myclass.create(cname='PHP') #類似方法2先建立課程然後繫結關係 # Myclass.objects.create(cname='GO') # Theacher.objects.get(id=2).myclass.add(6) #給id=2的班級新增一個id=3的老師 # Myclass.objects.get(id=2).theacher_set.add(3) #Myclass.objects.get(id=2).theacher_set.add(Theacher.objects.get(id=3)) #多對多情況add可以直接寫id或者物件,一對多的一的那方新增時只能寫物件
總結:給一對多新增物件是時,呼叫者時是一時add只能新增物件,是多的一方是物件和id都可以