我有以下几种型号:
Hikes(models.Model)
name = ...
difficulty = models.IntegerField
Regions(models.Model)
hike = models.ManyToManyField(Hikes)
现在,我正在尝试返回一个区域内最困难的加息,但是我需要在返回多个区域的查询集上显示此值。我想最好的方法是用“ hardesthike”字段或诸如此类的注释每个Region,但无法弄清楚代码。我可以使代码适用于单个区域,但不能使其适用于多个区域的查询集。
我对单个区域的代码是:
q = Region.objects.get(id=1)
hikes = q.hike.all().values('difficulty')
max = hikes.aggregate(Max('difficulty'))
如何将这个新值注释到初始区域?最好采用简单的整数形式,以便我可以按“区域中最困难的远足”进行排序。另外,当我尝试使用任何类型的聚合函数在视图中执行任何forloop时,我注意到我的网页速度大大降低(我的数据库中有10k +个区域/远足)–可以通过这种方式解决吗?
谢谢!
答案 0 :(得分:1)
您可以使用以下注释:
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
)
因此,如果您只对Region
中的id=1
感兴趣:
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
).filter(pk=1)
,或者如果您要检索该Region
对象:
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
).get(pk=1)
注意:通常,Django模型的名称为单数,因此使用
Region
代替。Regions