当有两个表,例如一个学生表,一个班级表,是多对一的关系。
方法1:
c = models.Class.object.get(pk=1)
#查询到ID为1的班级
stus = models.Student.object.filter(cls=c)
#查询出来所有班级为c的学生
#stus是多个对象
#可以循环出结果
for stu in stus :
print stu.id,stu.name
方法2
stus = models.Student.object.filter(cls__name='1703')
#双下划线为跨表查询,查询学生对应的所有cls为1703的学生
方法3
c=models.Class.object.get(pk=1)
#获取ID为1的班级
stus=c.Student_set.all
#获取所有该班级下的所有学生
以上为转载信息
我的设备管理系统代码
views 视图函数跨表查询
if request.method=='GET':
deviceId = args[0]
deviceObj=models.Devices.objects.filter(id=deviceId).first() #获取要修改的设备信息
deviceDict=model_to_dict(deviceObj) #将设备信息转换成字典,因为下面initial的参数必须是字典类型
devicePath = deviceObj.dev_imgs_set.values('path').first()#获取图片路径
deviceApplyPath=deviceObj.dev_imgs_set.values('apply_path').first()#获取申请采购图片路径
deviceform = DeviceForm(initial=deviceDict) #初始化表单,传入值
return render(request,'modifydevice.html',{'deviceObj':deviceObj,'deviceform':deviceform,'path':devicePath['path'],'apply_path':deviceApplyPath['apply_path']})
这里我用了上面转载的第三肿方法
html 前端页面跨表查询
<p><img id="previewApplyPic" style="margin-left:300px;width:250px;height: 300px" src="/media/{{ path }}"></p>
<!--这里的{{ path }}用的是views里传入的path --!>
<p><img id="previewApplyPic" style="margin-left:300px;width:250px;height: 300px" src="/media/{{ deviceObj.dev_imgs_set.all.0.apply_path }}"></p>
<!--这里的{{ deviceObj.dev_imgs_set.all.0.apply_path }}是前端跨表查询 --!>