【发布时间】:2021-03-01 22:42:01
【问题描述】:
这个问题与cs50课程的项目2有关,可以找到here
我查看了以下文档:
另外,我还查看了汇总和注释。
我已经在模板文件中创建了表格,我认为这非常简单。缺少的列是我要填写的内容。下图
这些是我创建的模型
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 做到这一点。
【问题讨论】:
-
尝试时会发生什么:
Bid.objects.filter(list_item__title='Cabinet').prefetch_related('list_item').aggregate(Max('bid')) -
@RobL 谢谢,这太棒了!!!我得到了
{'bid__max': 110},当我到达预取部分时,我已经脑死了……另外,是否可以编写一个查询来一次性获取完整的行?您可以将您的评论作为答案,如果您愿意,我可以将其标记为已接受。
标签: python django orm django-queryset django-aggregation