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=’老師名稱’) password = models.CharField(max_length=10,verbose_name=’密碼’) class Meta: verbose_name_plural = ’教師表’ def __str__(self): return self.nameclass 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() # 以一表反向查詢多表,查詢這位老師的學(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í)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Springboot 跨域配置無(wú)效及接口訪問(wèn)報(bào)錯(cuò)的解決方法2. JSWDK的發(fā)布目錄的更改3. Java Bean 映射工具 Dozer 2.0 發(fā)布4. WebSocket使用以及在vue如何使用問(wèn)題5. 用js編寫(xiě)留言板6. PHP設(shè)計(jì)模式之迭代器模式淺析7. Android實(shí)現(xiàn)下載進(jìn)度條效果8. python argparse模塊通過(guò)后臺(tái)傳遞參數(shù)實(shí)例9. python matplotlib模塊基本圖形繪制方法小結(jié)【直線,曲線,直方圖,餅圖等】10. php字符串函數(shù) str類(lèi)常見(jiàn)用法示例
