1. 程式人生 > >django---一對多和多對多欄位的操作訓練

django---一對多和多對多欄位的操作訓練

建表準備:

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都可以