當有兩個表,例如一個學生表,一個班級表,是多對一的關係。
方法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 }}是前端跨表查詢 --!>