如何从数据库对象中检索整数

How to retrieve integer from database objects

我对 Django 还很陌生,并尝试建立一个用于科学评论的数据库 运行。我想展示的一件事是每年发表了多少评论。

在这个例子中我使用了以下数据:

year: number of reviews published
1999: 1
2019: 4
2022: 5

models.py

class Review(models.Model):
    title = models.CharField(max_length=100,null=True)
    doi = models.URLField(max_length=200,unique=True,null=True)
    author = models.CharField("First author",max_length=100,null=True)
    year = models.PositiveIntegerField(null=True)

views.py

from django.shortcuts import render
from .models import Review
from django.db.models import Count

def about(response):
    reviews_year_count = Review.objects.values('year').annotate(Count('year'))
    context = {'reviews_year_count':reviews_year_count}
    return render(response, "main/about.html", context)

about.html

<html>
<body>
{{reviews_year_count|join:", "}}
</body>
</html>

在本地主机上输出
目前:

{'year': 1999, 'year__count': 1}, {'year': 2019, 'year__count': 4}, {'year': 2022, 'year__count': 5}

目标:

1, 4, 5

我想不通的是如何摆脱 {'year': 1999, 'year__count': } 并且那里只有整数值。我查看了 Django 文档页面。我尝试的其中一件事是在 reviews_year_count = Review.objects.values('year').annotate(Count('year')) 后面添加 defer(),但是根据文档,在 values() 之后调用 defer() 是没有意义的。

我的目标是使用 chartsjs 将数据用作图表的输入。

您可以使用 python 仅获取值列表:

reviews_year_count = Review.objects.values('year').annotate(Count('year'))
reviews_year_count = [i['year__count'] for i in reviews_year_count]

也可以使用 values 来处理 django ORM