从一组行中获取最大值
Get max value from a set of rows
此问题与 cs50 课程的项目 2 有关,可以找到 here
我查看了以下文档:
此外,我还查看了聚合和注释内容。
我在模板文件中创建了 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'))
此问题与 cs50 课程的项目 2 有关,可以找到 here
我查看了以下文档:
此外,我还查看了聚合和注释内容。
我在模板文件中创建了 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'))