欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

django之models学习总结

程序员文章站 2022-07-10 22:08:18
from django.db import models # Create your models here. class Classes(models.Model): ''' 班级表 ''' title=models.CharField(max_length=32) m=models.ManyTo... ......
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字段,自动生成第三表,依赖关联表对第三张表进行操作。
'''