django:下拉框二級聯動實現


注意:只列舉核心部分代碼

前台模板:

第一級下拉菜單:

<div class="col-sm-4">
  <select data-placeholder="選擇項目..." class="form-control" name="project_id" id="db_link" required="required">
    <option value="">請選擇數據庫連接</option>
    {% for item in res %}
    <option value="{{ item.id }}" hassubinfo="true">{{ item.link_name }}</option>
    {% endfor %}
  </select>

</div>

第二級下拉菜單:

<div class="col-sm-4">
  <select data-placeholder="選擇基礎表." class="form-control" name="project_id" id="db_table" required="required">
  // 這里放置回調函數渲染的內容
  </select>
</div>

 

對應js:

<script>
        $("#db_link").change(function() {
            var options=$("#db_link option:selected"); //獲取選中的項
            var db_link_id = options.val(); //獲取選中的值
            {#alert("ok");#}
            alert(db_link_id);

            // 選擇id=db_link的元素時觸發該ajax請求,調用/comparison/get_table接口
            $.ajax({
                url: '/comparison/get_table',
                data: {"db_link_id": db_link_id},
                type: 'GET',
                dataType: 'json',
                success: function (data) {
                    var content='';
                    {#alert(123456);#}
                    $.each(data, function(i, item){
                        // 調用接口后返回list數據[u'account_role', u'account_user'],循環遍歷該list拼接選項的內容
                        content+='<option value='+item+'>'+item+'</option>'
                    });
                    // 將拼接好的內容作為id=db_table這個select元素的內容
                    $('#db_table').html(content)
        },
            })

        })
    </script>

 視圖函數:

def get_table(request):
    """
    當選擇數據庫連接時,聯動查詢出該庫的表,供下拉選擇
    :return:
    """
    if request.method == 'GET':
        # 獲得前台傳遞來的id,查詢對應的數據庫連接信息
        db_link_id = request.GET.get('db_link_id')
        print '從前台獲得的id為:%s' % db_link_id
        # 獲取數據庫類型和數據庫名稱
        db_link_info = LinkDBInfo.objects.get(id=db_link_id)
        # 當使用model_to_dict時orm只能是get,不能是filter
        db_link_info_dict = model_to_dict(db_link_info)
        print db_link_info_dict
        # 根據不同數據庫類型選擇不同的連接庫方式
        if db_link_info_dict['type'] == 'mysql':

            conn = pymysql.connect(db_link_info_dict['host'], db_link_info_dict['db_username'], db_link_info_dict['db_pwd'], db_link_info_dict['db_name'], charset='utf8')
            cursor = conn.cursor()
            # db_name = "select db_name from comparison_linkdbinfo where id='%s'" % db_link_id
            # print db_name
            # 查詢該庫中的所有表
            get_all_table_sql = "select table_name from information_schema.tables where table_schema= '%s'" % db_link_info_dict['db_name']
            cursor.execute(get_all_table_sql)
            data = list(cursor.fetchall())
            print data
            table_list = []
            for i in data:
                table_list.append(i[0])
                # print data_list
            print table_list
            return JsonResponse(table_list, safe=False)

 


免責聲明!

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



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