我有这两种型号:
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是否为最后一次迭代,如果是最后一次,则不包括尾部逗号。