如何在django中仅将queryset的值转换为新的字典数组
我希望以高效的方式将数据从视图传递到模板。具体来说,我需要一个包含dict的数组,如下所示:如何在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
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是更好的方法吗?这可能是justdata=[{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 = {}