django--如何將數據結果集序列化傳給前端頁面展示


示例為一對多的表關系,學生為多,老師為一,設置外鍵字段可以為空,也就是說關聯的老師被刪除該學生依然存在,只是相應字段留空

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.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='學生名字')
    age = models.IntegerField(verbose_name='年齡')
    class Meta:
        verbose_name_plural = '學生表'
    def __str__(self):
        return self.name
     teacher = models.Teacher.objects.get(pk=id)     # id=id的某位老師
        students = teacher.student_set.all()        # 以一表反向查詢多表,查詢這位老師的學生

此時,all()返回的是一個結果集。<QuerySet [<Student: 學生1>, <Student: 學生22>, <Student: 學生3>, <Student: 學生44>]>

這里要將這個結果傳給前端ajax需要先將其轉成json格式,但是這樣的一個結果集又不能使用json.dumps的。

我的方法是先給它轉成列表嵌套字典再進行序列化操作

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默認為True,只接受參數為dict字典類型,非dict類型---“報錯:In order to allow non-dict objects to be serialized set the safe parameter to False.” safe=False之后list列表, tuple元祖, set集合就都可以

前端ajax接收參數,並且循環變量當前傳過去的列表

$('#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循環
                        str += '<li>'  + res[i]['name'] + '</li>'
                        }
                        $('#students').html(str)                    
                }
            })           

        })

 渲染效果如下圖所示

    <button id="submit2">點擊查看我的學生</button>
    <p id="students"></p>  

就是這個小小的按鈕,竟然在背后做了這么多事情,使得我們要的信息成功的展示在了下面的標簽里

所以任何一份職業都不容易,沒有小角色,都是大人物


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM