以下面指定的格式从django queryset返回数据

时间:2014-07-04 10:52:57

标签: django django-queryset

我有一个名为groupname的字段的数据库表。 我有一个查询集,用于计算组名的数量,如下所示

count_groups=Eventgroup.objects.values('groupname').annotate(group_count=Count('groupname'))

我想以下列格式返回此值:

[{
    data : [[0, 4]],
    label : "Event 2345"
}, {
    data : [[0, 3]],
    label : "Event 34567"
}, {
    data : [[0, 5]],
    label : "Event 4567",

}, {
    data : [[0, 3]],
    label : "Event 4356"
}];

其中label应该是组名的名称,在数据中,0始终存在,但第二个值是组名的计数。 这是我的模特:

class Eventgroup(models.Model):
    event_id=models.CharField(max_length=500)
    OS_CHOICE=(('Win 2003','windows 2003'),
        ('Win 2008','Windows 2008'),
        ('Win XP','Windows XP'),
        ('Win VISTA','Win VISTA'),
        ('Win 2007','Windows 2007'),
        )
    windows=models.CharField(max_length=20,choices=OS_CHOICE,default='Win 2003')
    groupname=models.CharField(max_length=250)
    def __unicode__(self):
        return " %s, group name:%s" \
            % (int(self.event_id), str(self.groupname.name),str(self.windows.name))
    class Meta:
        db_table= 'Eventgroups'
        verbose_name_plural='eventgroups'

请根据我的数据提供见解。问候

1 个答案:

答案 0 :(得分:1)

像这样的东西

def format_results(queryset):
    for eventgroup in queryset:
        yield {
            'data': [[0, eventgroup['group_count']]],
            'label': eventgroup['name'],
        }

count_groups = Eventgroup.objects.values('groupname').annotate(group_count=Count('groupname'))
results = format_results(count_groups)

使用像这样的生成器的行为类似于查询集,因为它不会立即作为列表对象进行评估或完全加载到内存中。