溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)Django數(shù)據(jù)結(jié)果集序列化并展示

發(fā)布時(shí)間:2020-08-01 10:43:57 來(lái)源:億速云 閱讀:221 作者:小豬 欄目:開(kāi)發(fā)技術(shù)

小編這次要給大家分享的是如何實(shí)現(xiàn)Django數(shù)據(jù)結(jié)果集序列化并展示,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

示例為一對(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.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() # 以一表反向查詢多表,查詢這位老師的學(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)          
        }
      })      

    })

渲染效果如下圖所示

如何實(shí)現(xiàn)Django數(shù)據(jù)結(jié)果集序列化并展示

 <button id="submit2">點(diǎn)擊查看我的學(xué)生</button>
<p id="students"></p>

就是這個(gè)小小的按鈕,竟然在背后做了這么多事情,使得我們要的信息成功的展示在了下面的標(biāo)簽里[/code]

看完這篇關(guān)于如何實(shí)現(xiàn)Django數(shù)據(jù)結(jié)果集序列化并展示的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI