4

私はこれらの2つのモデルを持っています:

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

私がやろうとしているのは、ログ エントリに基づいて Google マップ チャートを表示することです。そのため、テンプレートに渡す必要があるのは次のようなものです。

    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 に答える