4

我有这两个模型:

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]
        ]);

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

4

1 回答 1

3

我在这里假设它popularity被定义为模型的 SQL countLog按国家分组。如我错了请纠正我。有关更多信息,请参阅聚合文档

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,如果它是最后一次迭代,则不包括尾随逗号。

于 2013-07-18T01:23:34.867 回答