Django----ORM 基本操作的补偿

Posted 阜阳小全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django----ORM 基本操作的补偿相关的知识,希望对你有一定的参考价值。


from django.db import models

# Create your models here.

class Classes(models.Model):
\'\'\'
班级表
\'\'\'
titile = models.CharField(max_length=32)
m = models.ManyToManyField("Teacher")



class Teacher(models.Model):
\'\'\'
老师表
\'\'\'
name = models.CharField(max_length=32)

# 单表的增删改查
# 增
# Teacher.objects.create(name="root")
# obj=Teacher(name="root")
# obj.save()
# 查
# Teacher.objects.all()
# Teacher.objects.filter(id=1)
# Teacher.objects.filter(id=1,name="root")
# Teacher.objects.filter(id__gt=1)
# result=Teacher.objects.filter(id__gt=1).first()
#
# 删
# Teacher.objects.filter(id=1).delete()
#
# 改
# Teacher.objects.all().update(name="alex")
# Teacher.objects.filter(id=1).update(name="alex")





# class C2T(models.Model):
# \'\'\'
# 班级和老师之间的关系表
# \'\'\'
# cid = models.ForeignKey(Classes)
# tid = models.ForeignKey(Teacher)




#####################################多对多
\'\'\'
班级:
id titile
1 1班
2 2班
3 3班
老师:
id name
1 alex
2 dou
3 chou
4 lv
增加
obj1 = Classes.objects.filter(id=1).first()
obj1.m.add(2) # 2就是老师id
obj1.m.add([4,5]) # 4,5就是老师id


obj2 = Classes.objects.filter(id=2).first()
obj2.m.add(2) # 2就是老师id
obj2.m.add([4,5]) # 3,5就是老师id
删除
obj1.m.remove([4,5]) #删除 4,5老师
清空
obj2.m.clear() #删除 将班级id=2的老师全部删除
重置
obj2.m.set([2,3,4]) #将班级id=2的老师设置为id=[2,3,4]


把2班的所有老师列绝出来
obj3 = Class.objects.filter(id=2).first() #得到2班
obj3.id
obj3.titile
ret = obj3.m.all() #ret是一个列表,[老师2(id,name),老师3(id,name),老师4(id,name)]


老师班级关系表
id 班级id 老师id
1 1 2
4 2 2
5 2 3
6 2 4

\'\'\'




class Student(models.Model):
\'\'\'
学生表
\'\'\'
username = models.CharField(max_length=32)
age = models.IntegerField()
gender = models.BooleanField()
cs = models.ForeignKey(Classes,on_delete=models.CASCADE,)

\'\'\'
id username age gender cs_id

增加
Student.objects.create(username="aa",age=12,gender="男",cs_id=1)
Student.objects.create(username="aa",age=12,gender="男",cs_id=Classes.objects.filter(id=1).first)
查看
ret = Student.objects.filter(id=1)
for item in ret:
print(item.id)
print(item.username)
print(item.age)
print(item.gender)
print(item.cs_id)
print(item.cs.id)
print(item.cs.name)
删除
Student.objects.filter(id=1).delete()
Student.objects.filter(cs_id=1).delete()

cid = input("请输入班级ID")
Student.objects.filter(cs_id=cid).delete()

cname=input("请输入班级名称")
Student.objects.filter(cs__name=cname).delete() //写filter条件的时候,用__来跨表

修改
Student.objects.filter(cs_id=1).update()

\'\'\'



 

 

1 类代表数据的表

2 类的对象代指数据库中标的一行记录

3 FK字段代指关联中的一行数据(类的对象)

  a,正向查用fk字段

  b,反向查,用小写的  类名_set.filter()   。默认是小写的类名_set.   在外键里加上related_name="sss"后,反向查就可以直接用sss来代替 小写的类名_set

4 M2M 字符会自动生成第三张那个表,以来关联表对第三张表简介操作

 

 

以上是关于Django----ORM 基本操作的补偿的主要内容,如果未能解决你的问题,请参考以下文章

Django orm操作

Django orm的使用

python-- Django ORM

Django ORM和SQLAlchemy类比

Django orm的正向反向操作

Django - ORM创建基本类