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>
)
我想过滤一个包含每个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>
)