数据模型之间的关系

models之间的关系简单的分为一对一(OneToOneField),一对多(ForeignKey),多对多(ManyToManyField)三种

构建这种关系相对简单,只需要在models中声明即可,主要是在调用和查询的时候有些困难,所以这里主要说说查询相关

查询和引用一般是在视图函数views中实现

1.全部展示

from apps.model import AbsModel
def index(request):
abs=AbsModel.objects.all()

2.根据条件查询,一般是id,而id大多是由前端传过来的,通过request请求获取到id

from apps.model import AbsModel
def index(request):
abs=AbsModel.objects.get(id=id)

3.根据主表信息获取从表内容

这里假设AModel是主表,BModel是从表,已经获取到了主表的name=‘张三’信息,如何获取从表中name对应的详细信息呢

#先获取name=张三这条信息的数据
a=AModel.object.get(name='zhangsan')
#然后根据a.id获取b表的内容
res=BModel.object.get(a_id=a.id)

4.根据从表信息获得主表内容

这里假设AModel是主表,BModel是从表,已经获取到了从表的name=‘张三’信息,如何获取主表中班级对应的详细信息呢

#首先根据name信息获取从表数据
b1=BMolde.object.get(name='zhangsan')
#获取主表的name属性
aname=b1.amodel.aname
b1.amodel是一个objects对象

4.1.获取相同信息

res=BModel.object.filter(aname=b1.aname)

这里设置了在从表BModel中的条件,也就是aname=b1.aname。而b1是根据name获得的

4.2.获取从表的所有信息

#首先根据name信息获取从表数据
b1=BMolde.object.get(name='zhangsan')
#amodel.bmodel_set a表对应的b表集合
res=b1.amodel.bmodel_set.all()

5.根据主表信息找从表信息

#先根据已知信息获得信息所在的主表信息
a1=AModel.object.get(name='zhangsan')
再根据外键获得从表的信息
res=BMoldel.object.fieter(aname=a1)

也可以写成

#先根据已知信息获得信息所在的主表信息
a1=AModel.object.get(name='zhangsan')
再根据外键获得从表的信息
res=a1.bmodel_set.all()
当然这里获取到的都是从表的完整信息,也可以进行筛选,比如在
res=a1.bmodel_set.all()

这里,all()也可以需求改为filter或者get

删除的时候要先删除从表,再删除主表

使用

BModel.objects.get(name='zhangsan').delete()



猜你喜欢

转载自blog.csdn.net/a10090492/article/details/80459723
今日推荐