亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django自關(guān)聯(lián)實現(xiàn)多級聯(lián)動查詢實例

 更新時間:2020年05月19日 09:31:44   作者:ersaijun  
這篇文章主要介紹了Django自關(guān)聯(lián)實現(xiàn)多級聯(lián)動查詢實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1 問題引出

我們在開發(fā)網(wǎng)站的時候可能會遇到這種情況,多個字段之間有一定的關(guān)聯(lián)性,比如省市縣,選擇省,之后下一個選擇框的值則為該省的市集合,選擇市之后下一個選擇框的值為該市的縣集合。

一種實現(xiàn)方式是,建立三個模型表,用外鍵一對多方式,顯然這樣是不太合理的。Django提供了自關(guān)聯(lián)的實現(xiàn),模型自身關(guān)聯(lián),即一條數(shù)據(jù)關(guān)聯(lián)另一條數(shù)據(jù)。

本文以省市縣為案例介紹其具體實現(xiàn)方法。

2 具體實現(xiàn)

2.1 建立數(shù)據(jù)表Model

在model.py中建立數(shù)據(jù)表

class AdressInfo(models.Model):
  address = models.CharField(max_length = 200, null = True, blank = True, verbose_name = ‘地址')
  pid = models.ForeignKey(‘self' , null = True, blank = True, verbose_name = ‘自關(guān)聯(lián)')

  def __str__(self):
    return self.adress

說明:

name :省市縣的名字
pid:外鍵,self自關(guān)聯(lián),這里也可以使用 AdressInfo
null:為True表示可以為空,因為省級行政單位沒有父級
blank:為True表示admin后臺數(shù)據(jù)寫入的時候可以允許為空

然后遷移數(shù)據(jù)庫

python manage.py makemigrations
python manage.py migrate

這時可以在后臺數(shù)據(jù)表中添加數(shù)據(jù)

2.2 后端url和view函數(shù)

將前端網(wǎng)頁地址映射為對應(yīng)函數(shù),用正則表達式獲取前端傳輸?shù)膒id

url.py 文件

urlpatterns = [
  url(r'^addr/(\d+)$', Address.addrAPI, name = 'Addr)
]

view.py 文件

def addrAPI(request,addr_id): # 接收一個參數(shù)的id,指model中的pid屬性對應(yīng)的字段
  if (int(addr_id) == 0): # 為0表示查詢省,省的pid_id為null
    address_data = AddressInfo.objects.filter(pid__isnull = True).values('id','address')
  else: # 查詢市或其他縣
    address_data = AddressInfo.objects.filter(pid_id = int(addr_id)).values('id','address')

  area_list = []
  for a in address_data:
    area_list.append({'id':a['id'], 'address':a['address']})

  return JsonResponse(area_list, safe = False)

2.3 前端template

前端主要是顯示和執(zhí)行操作相應(yīng),具體實現(xiàn)是通過下拉框值的改變觸動相應(yīng)函數(shù)。這里只寫關(guān)鍵的地方。

address.html 文件

<body>
  <select id = 'pro'>
    <option value=''>請選擇省</option>
  </select>
  <select id = 'city'>
    <option value=''>請選擇市</option>
  </select>
  <select id = 'dis'>
    <option value=''>請選擇縣</option>
  </select>
</body>

<script>
address = function(a, b)
{
  $.get('/addr/'+a, function (dic){
    $.each(dic, function(index, item){
      b.append('<option value="' + item.id + '">' + item.address + '</option>')
    })
  })
}

$(function (){
  // 獲取省市縣元素
  pro = $('#pro')
  city = $('#city')
  dis = $('#dis')

  // 查詢省信息
  address(0, pro)

  // 根據(jù)省查詢市信息
  pro.change(function(){
    city.empty().append('<option value="">請選擇市</option>');
    dis.empty().append('<option value="">請選擇縣</option>');
    adress(this.value, city)
  })
  // 根據(jù)市查詢縣信息
  city.change(function(){
    dis.empty().append('<option value="">請選擇縣</option>');
    adress(this.value, dis)
  })
})
</script>

3 效果

以上這篇Django自關(guān)聯(lián)實現(xiàn)多級聯(lián)動查詢實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于time模塊求程序運行時間的方法

    Python基于time模塊求程序運行時間的方法

    這篇文章主要介紹了Python基于time模塊求程序運行時間的方法,涉及Python time模塊的使用及數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • python json.dumps中文亂碼問題解決

    python json.dumps中文亂碼問題解決

    這篇文章主要介紹了如何解決python中中文亂碼問題和json.dumps中文亂碼問題,需要的朋友可以參考下
    2021-05-05
  • 解決python中文亂碼問題方法總結(jié)

    解決python中文亂碼問題方法總結(jié)

    這篇文章主要介紹了解決python中文亂碼問題方法總結(jié),需要的朋友可以參考下
    2021-05-05
  • Python中的yield全方位解讀

    Python中的yield全方位解讀

    這篇文章主要介紹了Python中的yield全方位解讀,在 Python 中,使用了 yield 的函數(shù)被稱為生成器,跟普通函數(shù)不同的是,生成器是一個返回迭代器的函數(shù),只能用于迭代操作,更簡單點理解生成器就是一個迭代器,需要的朋友可以參考下
    2023-08-08
  • Python通過Socket手動實現(xiàn)HTTP協(xié)議

    Python通過Socket手動實現(xiàn)HTTP協(xié)議

    這篇文章主要為大家詳細介紹了Python如何通過Socket手動實現(xiàn)HTTP協(xié)議,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一
    2024-03-03
  • python單元測試框架pytest介紹

    python單元測試框架pytest介紹

    這篇文章介紹了python的單元測試框架pytest,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Python實現(xiàn)識別圖片為文字的示例代碼

    Python實現(xiàn)識別圖片為文字的示例代碼

    這篇文章主要為大家詳細介紹了Python如何不調(diào)用三方收費接口,照樣實現(xiàn)識別圖片為文字的功能。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • Python 3.x 安裝opencv+opencv_contrib的操作方法

    Python 3.x 安裝opencv+opencv_contrib的操作方法

    下面小編就為大家分享一篇Python 3.x 安裝opencv+opencv_contrib的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 關(guān)于fastapi異步框架操作的理解

    關(guān)于fastapi異步框架操作的理解

    這篇文章主要介紹了關(guān)于fastapi異步框架的操作,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 深入解析Python中的上下文管理器

    深入解析Python中的上下文管理器

    Python中把進入代碼塊前調(diào)用__enter__ 方法并在離開代碼塊后調(diào)用__exit__方法的對象作為上下文管理器,本文中我們就來深入解析Python中的上下文管理器,來看看上下文管理器的作用及用法:
    2016-06-06

最新評論