如何从数据库对象中检索整数
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
我对 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