获取过滤器中每个查询的最小值

时间:2020-04-10 06:50:30

标签: django django-models django-views

我有两个表1产品和2nd价格。像这样

class Activity(models.Model):
    activityName = models.CharField(max_length=50 , null=False, blank=False)
    activityId = models.CharField(max_length=20, null=True, blank=True)


class PerPersonTire(models.Model):
     activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
     name= models.CharField(max_length=100 , null=True , blank=True)
     minNumerofParticipents = models.IntegerField(default=0)
     price=models.IntegerField(default=0)



 class groupTire(models.Model):
     activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
     name= models.CharField(max_length=100 , null=True , blank=True)
     minNumerofParticipents = models.IntegerField(default=0)
     price=models.IntegerField(default=0)

现在情况是在每项活动中外键都有很多价格。因此,当我查询“活动”时,我也需要该表中的最低价格。

喜欢

Activity.object.all()

在这里,我还需要价格表中每个活动的最低价格。任何帮助对此将不胜感激。

编辑

现在的活动可以有团体价格或单一价格。那么我该如何计算两种价格

1 个答案:

答案 0 :(得分:3)

我们可以使用annotate来做到这一点:

from django.db.models import Min

activities = Activity.object.all().annotate(
    min_person_price=Min('perpersontire__price'),
    min_group_price=Min('grouptire__price'),
)

for activity in activities:
    print(
        activity.activityName, 
        activity.min_person_price, 
        acitivy.min_group_price,
    )

您可能想阅读Aggregation上Django的官方文档。他们有多个这样的例子。