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

  • 相关阅读:
    只有一点小感想
    selenium与360极速浏览器driver配置
    Python3安装cx_Oracle连接oracle数据库实操总结
    python3 中文乱码,UnicodeEncodeError: 'latin-1' codec can't encode characters in position 10-13: ordinal not in range(256)
    17个新手常见Python运行时错误
    selenium之xpath定位
    Python3 安装xlrd、xlwt、xlutils
    SQL 操作结果集 -并集、差集、交集、结果集排序
    bootstrap常..................
    pymysql拾遗
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/9937179.html
Copyright © 2020-2023  润新知