django之models学习总结

from django.db import models

# Create your models here.
class Classes(models.Model):
    '''
    班级表
    '''
    title=models.CharField(max_length=32)
    m=models.ManyToManyField('Teachers')

'''
obj=models.Classes.objects.filter(id=1).first()
obj.m.add(1)  代表创建班级id=1 老师Id=1数据对象
obj.m.add(2)  代表创建班级id=1 老师Id=2数据对象
 
obj=models.Classes.objects.filter(id=2).first()
obj.m.add(1)  代表创建班级id=2 老师Id=1数据对象
obj.m.add(2)  代表创建班级id=2 老师Id=2数据对象
obj.m.add([2,3])  代表创建班级id=2 老师id=2 id=3数据对象

'''
class Teachers(models.Model):
    '''
    老师表
    '''
    '''-----------单表-----------------
    每个数据对象在数据库中会有一列自增的ID
    一、创建数据对象(增)
    创建数据对象的两种方法
    1.models.Teachers.objects.create(name='xx')
    
    
    2.obj=Teachers(name='xx')
      obj.save()
      
      
      二、获取数据对象(查)
      models.Teachers.objects.all() //获取所有对象
      models.Teachers.objects.filter(id=1)//获取某个对象
      models.Teachers.objects.filter(id=1,name='xx')
      models.Teachers.objects.filter(id__gt=1)//获取ID大于等于1的对象
      models.Teachers.objects.filter(id__gt=1).first()//获取ID大于等于1的对象中的第一个
      models.Teachers.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
      三、删除数据对象(删)
      models.objects.Teachers.filter(id=1).delete()//删除ID=1对象
      
      四、修改数据对象
      models.Teachers.objects.all().update(name='xx')
      models.Teachers.objects.filter(id=1).update(name='xx')//有过滤条件的修改
    '''

    name=models.CharField(max_length=32)

class Student(models.Model):
    '''
    学生表
    '''

    username=models.CharField(max_length=32)
    age=models.IntegerField()
    gender=models.BooleanField()
    cs=models.ForeignKey(Classes,on_delete=models.CASCADE) #ForeignKey约束的对象在数据库中会自带下划线__id,此处的cs 里面包含id 和title


    '''
    学生对象在数据库中右5列标识

    id     username        age      gender      cs__id
    
    
    1.创建数据对象(增)
    models.Students.objects.create(username='xx',age=20,gender='男',cs__id=1)
    models.Students.objects.create(username='xx',age=20,gender='男',cs=models.Class.objects.filter(id=1).first())
    班级:
    Id     title
    1     软件工程
    2     嵌入式班
    3     大数据班
    Students类中的cs代表是班级里的一行数据:如:1 软件工程(即:id和title),若要取班级的中ID或title中的一项,
    需要采用cs__id或cs__title
    2.查询数据(查)
    res=models.Students.objects.all() //获取的是多条数据
    for item in  res:
        print(item.id)
        print(item.username)
        print(item.age)
        print(item.gender)
        print(item.cs__id)  
        print(item.cs.id)   #for循环跨表的时候可以使用cs__id或cs.id 
        print(item.cs__title)
        print(item.cs.title)
        
    3.删除(删)
    
    models.Students.objects.filter(id=1).delete()
    models.Students.objects.filter(cs__id=1).delete()
    models.Students.objects.filter(username='xxx').delete()
    
    
    cid=input('请输入班级ID')
    models.Students.objects.filter(cs__id=cid).delete()
    ctitle=input('请输入班级名称')
    models.Students.objects.filter(cs__title=ctitle).delete()
    models.Students.objects.filter(cs.title=ctitle).delete() 
    #cs.title=ctitle不成立,for循环中可以使用cs__id或cs.id,但是此处只能使用cs__id
    
    
    4.修改数据(改) 
    
    models.Students.objects.filter(id=1).update(username='xxx')
    
    '''

#多对多
'''
班级:
Id   title
1    网络1班
2    软件1班

老师:
Id      name
1       Lee
2       Mark
3       Amie

老师--班级关系对应表(类   隐藏的多对多数据表)
id    TeacherID    ClassId
1        1            2
1        1            2
2        2            1
2        2            1

'''

'''
总结:
1.models中的一个类代表数库中的一个表,类中的一个对象代表数据表中的一行记录
2.Fk字段代表关联表中的一行数据
3.manyTomany字段,自动生成第三表,依赖关联表对第三张表进行操作。
'''

  

猜你喜欢

转载自www.cnblogs.com/506941763lcj/p/10048108.html