【问题标题】:How to generate bubble chart (Chart.js) using data from database FILTERED by user in Django?如何使用 Django 中用户过滤的数据库中的数据生成气泡图(Chart.js)?
【发布时间】:2019-01-25 19:41:09
【问题描述】:

我是 Django 的新手,被困在一个似乎不成问题的地方。我正在尝试使用 Python、Django、MySQL 和 Chart.js 制作动态气泡图。我的数据库中存储了组织。他们有一些属性,如姓名、收入、收件人数量等。我将其展示给用户,他可以对其进行过滤(例如,他可以显示收件人数量超过用户指定的组织)。然后我想创建一个显示这些组织的气泡图。我设法做到了,但使用了所有数据库记录(静态解决方案,没有用户交互)。因此,现在在我的气泡图上,我可以看到所有内容,并且我想让它成为动态的 - 依赖于用户输入(仅显示被过滤的组织)。过滤后的数据位于 myuserlist1.html 文件的 filter.qs 中。 现在我在我的views.py中使用下面的代码在定义的URL下以JSON格式保存数据库中的所有记录:

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 下,而不是数据库中的所有数据,但我不知道该怎么做。我不知道如何从 View 访问过滤后的查询集。任何帮助,将不胜感激。先感谢您!

【问题讨论】:

    标签: javascript python ajax django chart.js


    【解决方案1】:

    您可以发出 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多