Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中仅将queryset的值转换为新的字典数组_Django_Django Views_Django Queryset - Fatal编程技术网

如何在django中仅将queryset的值转换为新的字典数组

如何在django中仅将queryset的值转换为新的字典数组,django,django-views,django-queryset,Django,Django Views,Django Queryset,我希望以高效的方式将数据从视图传递到模板。具体来说,我需要一个包含dict的数组,如下所示: arraydict=[{key:value},{key:value}…] 现在我就是这么做的: class VisualizationView(ListView): template_name = 'visualize.html' model = UrlTime def get_context_data(self, **kwargs): context = su

我希望以高效的方式将数据从视图传递到模板。具体来说,我需要一个包含dict的数组,如下所示:

arraydict=[{key:value},{key:value}…]

现在我就是这么做的:

class VisualizationView(ListView):
    template_name = 'visualize.html'
    model = UrlTime

    def get_context_data(self, **kwargs):
        context = super(VisualizationView, self).get_context_data(**kwargs)
        #Extracts the months and counts them
        context['months'] = (UrlTime.objects.annotate(month=ExtractMonth('timestamp')).values('month').annotate(c=Count('id')))
这算我的月数。在my django模板中打印my{month}会返回此查询集:

<QuerySet [{'month': 5, 'c': 313}, {'month': 6, 'c': 1961}]>


到目前为止还不错。我的想法是用d3.js可视化我的数据,我需要结构良好的数据。因此,我想将此查询集转换为如下内容:

data=[{5:313},{6:1961}]
。基本上,创建queryset值的dict,然后将其放入数组中

(最好是
data=[{May:313},{June:1961}]

我尝试了.values()方法,它破坏了我的count方法。我还试着把它放在一个列表中,如下所示:

list(UrlTime.objects.annotate(month=ExtractMonth('timestamp')).values('month').annotate(c=Count('id'))
(这可以工作,但会返回一个包含键和数组的列表,如下所示:
[{'month':5,'c':313},{'month':6,'c':1962}]

我也在我的模板中做了一些循环,但是我的想法是将大部分逻辑放到我的视图中,所以我更喜欢模板之外的代码


有没有一个简单的方法可以做到这一点,或者我走错了方向?非常感谢您的帮助。提前谢谢。

我从您的问题中了解到,您有这个:[{'month':5,'c':313},{'month':6,'c':1962}],并且需要这个:[{{5:313},{6:1961}] 因此:


要将月份编号更改为月份名称,您需要创建一个转换函数并替换我从您的问题中得到的值:[{'month':5,'c':313},{'month':6,'c':1962}],并且需要:[{'5:313},{6:1961}] 因此:


要将月份编号更改为月份名称,您需要创建一个转换函数并替换该值,您可以像这样重构数据:

data=[]
对于_列表中的项:#列表是python列表的初始数据格式
tmp_dict={}
tmp_dict[项目['month']]=项目['c']
数据追加(tmp_dict)
打印(数据)

对于日期,您有一个主题可以很好地解释:

您可以像这样重构数据:

data=[]
对于_列表中的项:#列表是python列表的初始数据格式
tmp_dict={}
tmp_dict[项目['month']]=项目['c']
数据追加(tmp_dict)
打印(数据)

关于日期,您有一个主题可以很好地解释:

我不确定您在问什么。您可以使用
JSON.dumps()将该查询集转换为JSON
。谢谢Daniel。最后,我想处理javascript文件中的数据。我尝试先处理视图中的所有逻辑。然后我将其传递到我的模板,并从那里将其传递到js文件。下面的答案完全符合我的要求。但你会说,将数据转换为JSON是更好的方法吗?我不确定是什么您可以通过
JSON.dumps()将查询集转换为JSON
。谢谢Daniel。最后,我想处理javascript文件中的数据。我尝试先处理视图中的所有逻辑。然后我将其传递到我的模板,然后从那里将其传递到js文件。下面的答案确实回答了我想要的。但是,你会说将数据转换为JSON是更好的方法吗?这可能是just
data=[{item[“month”]:item[“c”]}对于初始数据中的item]
。但我不确定OP是这样要求的。非常感谢Annabelle。你的解决方案也很有魅力!!正是我需要的!这可能只是
data=[{item[“month”]:item[“c”}对于初始数据中的item]
。但我不确定OP所要求的是什么。非常感谢Annabelle。你的解决方案就像一个符咒一样有效!!正是我所需要的!非常感谢Malecto。它就像一个符咒一样有效!!这就是我所需要的!!这是一种荣幸!非常感谢Malecto。它就像一个符咒一样有效!!这就是我所需要的!!这是一种荣幸!
initial_data = [{'month': 5, 'c': 313}, {'month': 6, 'c': 1962}]
data = []
list_item ={}
for items in initial_data:
    month = items['month']
    count =items['c']
    list_item[month] = count
    data.append(list_item)
    list_item = {}