Django數(shù)據(jù)結(jié)果集序列化并展示實(shí)現(xiàn)過(guò)程
示例為一對(duì)多的表關(guān)系,學(xué)生為多,老師為一,設(shè)置外鍵字段可以為空,也就是說(shuō)關(guān)聯(lián)的老師被刪除該學(xué)生依然存在,只是相應(yīng)字段留空
class Teacher(models.Model):
name = models.CharField(max_length=10,verbose_name='老師名稱(chēng)')
password = models.CharField(max_length=10,verbose_name='密碼')
class Meta:
verbose_name_plural = '教師表'
def __str__(self):
return self.name
class Student(models.Model):
teacher = models.ForeignKey(to=Teacher,on_delete=models.SET_NULL,null=True,verbose_name='教師')
name = models.CharField(max_length=10,verbose_name='學(xué)生名字')
age = models.IntegerField(verbose_name='年齡')
class Meta:
verbose_name_plural = '學(xué)生表'
def __str__(self):
return self.name
teacher = models.Teacher.objects.get(pk=id) # id=id的某位老師
students = teacher.student_set.all() # 以一表反向查詢(xún)多表,查詢(xún)這位老師的學(xué)生
此時(shí),all()返回的是一個(gè)結(jié)果集。<QuerySet [<Student: 學(xué)生1>, <Student: 學(xué)生22>, <Student: 學(xué)生3>, <Student: 學(xué)生44>]>
這里要將這個(gè)結(jié)果傳給前端ajax需要先將其轉(zhuǎn)成json格式,但是這樣的一個(gè)結(jié)果集又不能使用json.dumps的。
我的方法是先給它轉(zhuǎn)成列表嵌套字典再進(jìn)行序列化操作
def index(request):
if request.method == "GET":
teacher_name = request.session.get('name')
teacher = models.Teacher.objects.get(name=teacher_name)
students = teacher.student_set.all()
print(students)
list = []
for i in students:
json_dict = {}
json_dict['name'] = i.name
json_dict['age'] = i.age
list.append(json_dict)
return JsonResponse(list,safe=False) # 這里safe默認(rèn)為T(mén)rue,只接受參數(shù)為dict字典類(lèi)型,非dict類(lèi)型---“報(bào)錯(cuò):In order to allow non-dict objects to be serialized set the safe parameter to False.” safe=False之后list列表, tuple元祖, set集合就都可以
前端ajax接收參數(shù),并且循環(huán)變量當(dāng)前傳過(guò)去的列表
$('#submit2').click(function(){
$.ajax({
url:'/app1/index/',
type:'GET',
success:function(res){
console.log(res)
var str = ''
for(var i = 0; i < res.length; i++){ # js中的for循環(huán)
str += '<li>' + res[i]['name'] + '</li>'
}
$('#students').html(str)
}
})
})
渲染效果如下圖所示

<button id="submit2">點(diǎn)擊查看我的學(xué)生</button>
<p id="students"></p>
就是這個(gè)小小的按鈕,竟然在背后做了這么多事情,使得我們要的信息成功的展示在了下面的標(biāo)簽里[/code]
所以任何一份職業(yè)都不容易,沒(méi)有小角色,都是大人物
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python讀取含url圖片鏈接的txt文檔方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了三種Python讀取含url圖片鏈接的txt文檔方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
深入淺析NumPy庫(kù)中的numpy.diag()函數(shù)
通過(guò)本文的介紹,我們深入了解了NumPy庫(kù)中numpy.diag()函數(shù)的用法和應(yīng)用,從基本用法到高級(jí)特性,再到在線性代數(shù)中的應(yīng)用,我們逐步展示了numpy.diag()在處理對(duì)角矩陣和相關(guān)問(wèn)題時(shí)的強(qiáng)大功能,需要的朋友可以參考下2024-05-05
詳解python基礎(chǔ)之while循環(huán)及if判斷
這篇文章主要介紹了python基礎(chǔ)之while循環(huán)及if判斷的相關(guān)資料,需要的朋友可以參考下2017-08-08
Python數(shù)據(jù)分析之pandas比較操作
比較操作是很簡(jiǎn)單的基礎(chǔ)知識(shí),不過(guò)Pandas中的比較操作有一些特殊的點(diǎn),本文介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助.需要的朋友可以參考下2021-05-05
Python matplotlib實(shí)時(shí)畫(huà)圖案例
這篇文章主要介紹了Python matplotlib實(shí)時(shí)畫(huà)圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
10行Python代碼計(jì)算汽車(chē)數(shù)量的實(shí)現(xiàn)方法
這篇文章主要介紹了10行Python代碼計(jì)算汽車(chē)數(shù)量的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
python-itchat 獲取微信群用戶(hù)信息的實(shí)例
今天小編就為大家分享一篇python-itchat 獲取微信群用戶(hù)信息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

