正在提取统计数据



我有这两种型号:

class Log(models.Model):
    ...
    country = models.ForeignKey(Country, null=True, blank=True)
    ...
    user = models.ForeignKey('auth.User')

class Country(models.Model):
    name = models.CharField(max_length=50)
    alpha_2_code = models.CharField("Alpha-2 code", max_length=2, unique=True)
    alpha_3_code = models.CharField("Alpha-3 code", max_length=3, unique=True)
    numeric_code = models.PositiveSmallIntegerField("Numeric code", max_length=3, unique=True)
    order = models.SmallIntegerField(max_length=3)
    continent = models.ForeignKey(Continent)
    def __unicode__(self):
        return self.name

我想做的是根据日志条目显示谷歌地图,所以我应该传递给模板的内容如下:

    function drawRegionsMap() {
        var data = google.visualization.arrayToDataTable([
            ['Country', 'Popularity'],
            ['Germany', 200],
            ['United States', 300],
            ['Brazil', 400],
            ['Canada', 500],
            ['France', 600],
            ['RU', 700]
        ]);

提取数据并将其传递到模板的最快方法是什么?

这里我假设popularity被定义为Log模型的SQL count,按国家分组。如果我错了,请纠正我。有关详细信息,请参阅聚合文档。

from django.db.models import Count
queryset = Log.objects.values('country__name').annotate(popularity=Count('country__name'))

然后在你的模板中你会做:

var data = google.visualization.arrayToDataTable([
        ['Country', 'Popularity'],
        {% for log in queryset %}
        ['{{ log.country.name }}', {{ log.popularity }} ] {% if not forloop.last %},{% endif %}
        {% endfor %}
    ]);

请注意,在模板中,我检查forloop是否为最后一次迭代,如果是最后一次,则不包括尾部逗号。

最新更新