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字段,自动生成第三表,依赖关联表对第三张表进行操作。
'''