从一组行中获取最大值

Get max value from a set of rows

此问题与 cs50 课程的项目 2 有关,可以找到 here

我查看了以下文档:

Django queryset API ref

Django making queries

此外,我还查看了聚合和注释内容。

我在模板文件中创建了 table,我认为这非常简单。缺少的列是我要填写的。下图

这些是我创建的模型

class User(AbstractUser):
    pass

class Category(models.Model):
    category = models.CharField(max_length=50)

    def __str__(self):
        return self.category

class Listing(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField()
    initial_bid = models.IntegerField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    date_created = models.DateField(auto_now=True)

    def __str__(self):
        return self.title

class Bid(models.Model):
    whoDidBid = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    list_item = models.ForeignKey(Listing, default=0, on_delete=models.CASCADE)
    bid = models.IntegerField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return_string = '{0.whoDidBid} {0.list_item} {0.bid}'
        return return_string.format(self)

这是我在很长一段时间后最接近的结果。但我得到的结果只是数字 2。参考下面的图片

Listing.objects.filter(title='Cabinet').aggregate(Max('bid'))

其中“Cabinet”是我创建的 Listing 对象。并对其进行了两次出价。

所以问题是,如何获得特定列表的最高出价(即本例中的 110)? 使用 orm.我想如果我使用原始 sql 查询,我可以构建一个字典,将它发送到带有查询集的模板。然后在遍历查询集时,获取键的值,其中键是列表的名称或类似行的名称。不,我想知道如何通过 ORM 做到这一点。

这是答案 #1

Bid.objects.filter(list_item__title='Cabinet').prefetch_related('list_item').aggregate(Max('bid'))

当你尝试这个时会发生什么(抱歉,我没有任何这样的对象可以测试):

Bid.objects.values(list_item__title).prefetch_related('list_item').annotate(Max('bid'))