簡體   English   中英

如何在Django中使用用戶過濾的數據庫中的數據生成氣泡圖(Chart.js)?

[英]How to generate bubble chart (Chart.js) using data from database FILTERED by user in Django?

我是Django的新手,只停留在一個似乎不是問題的地方。 我正在嘗試使用Python,Django,MySQL和Chart.js進行動態氣泡圖。 我的數據庫中存儲了組織。 它們具有一些屬性,例如名稱,收入,收件人數量等,我正在向用戶顯示它,他可以對其進行過濾(例如,他可以顯示僅收件人多於用戶指定的組織)。 然后,我想創建一個顯示這些組織的氣泡圖。 我設法做到了,但是使用了所有數據庫記錄(靜態解決方案,無需用戶交互)。 因此,現在在氣泡圖上,我可以看到所有內容,並且希望使其動態化-取決於用戶輸入(僅顯示已過濾的組織)。 過濾的數據位於myuserlist1.html文件的filter.qs中。 現在,我在views.py中使用以下代碼,以JSON格式將數據庫中的所有記錄都定義為URL:

class ChartData(APIView):

    authentication_classes = []
    permission_classes = []


    def get(self, request, format=None):
        organizations = Opp.objects.all().values()
        data = list(organizations)  
        return Response(data)

    def search(request):
        user_list = User.objects.all()
        user_filter = UserFilter(request.GET, queryset=user_list)
        return render(request, 'user_list1.html', {'filter': user_filter})'''

我用於存儲結果的網址:

url(r'^api/chart/data/$', ChartData.as_view()),

這是我的chart.html文件的一部分:

<script>
    {% block jquery %}
    var endpoint = '/api/chart/data/'
    var endpoint= form.attr('action')

    var dynamicColors = function() {
        var r = Math.floor(Math.random() * 255);
        var g = Math.floor(Math.random() * 255);
        var b = Math.floor(Math.random() * 255);
        return "rgb(" + r + "," + g + "," + b + ")";
    }
    $.ajax({
        method: "GET",
        url: endpoint,
        success: function(data){
            //...... some logic there
        }
    })

</script>  

我不知道該怎么辦。 我本想使過濾后的數據中的JSON定位在URL下,而不是數據庫中的所有數據下,但是我不知道該怎么做。 我不知道如何從視圖訪問過濾的查詢集。 任何幫助,將不勝感激。 先感謝您!

您可以發出HTTP POST請求而不是GET請求,以將JSON數據傳遞到后端。 例如:

$.ajax({
    method: "POST",
    url: endpoint,
    data: {
        "organisation": "organisation_name"
    },
    success: function(data){
        //...... some logic there
    }
})

這會將data作為JSON序列化對象傳遞給Django視圖。

然后,在Django視圖上,您​​可以反序列化組織並過濾模型:

import json

def get(self, request, format=None):
    json_data = json.loads(request.body)
    organisation_name = json_data.get("organisation")
    organizations = Opp.objects.filter(name=organisation_name).values()
    data = list(organizations)  
    return Response(data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM