Django 对象过滤器 - 每个项目的最高出价

Django object filter - highest bid for every item

我想过滤一个包含每个listing_id最高价格的对象。

来自 models.py

class Listing(models.Model):
title = models.CharField(max_length=64)

class Bid(models.Model):
   listing_id = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name="listing")
   user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
   price = models.DecimalField(max_digits=19, decimal_places=2, blank=False, validators=[MinValueValidator(1)])

我能得到一些建议吗?

您可以注释出价最高的 Listing 模型:

from django.db.models import Max

Listing.objects.annotate(
    <b>highest_bid=Max('listing__price')</b>
)

或者如果你想要Bid个物件,你可以先标注其listing的最高出价,然后按价格过滤:

from django.db.models import F, Max

Bid.objects.annotate(
    <b>highest_bid=Max('listing_id__listing__price')</b>
).filter(
    <b>price=F('highest_bid')</b>
)