Как ссылаться на self.something как на ForeignKey в Django models.py?
Я работаю над проектом Django, который использует модели. Я хочу каким-то образом получить доступ к самой высокой ставке по данному объявлению в любое время (как listing.highest_bid) или каким-то другим способом, если есть лучшее решение. То, что я попробовал в приведенном ниже фрагменте кода для highest_bid, похоже, не работает, это дает мне AttributeError (AttributeError: 'str' object has no attribute 'bids'). Как я могу получить доступ к значениям параметров модели и отфильтровать их по своему усмотрению?
class Listing(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
title = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
starting_bid = models.PositiveIntegerField()
picture = models.TextField(max_length=200, default='static/auctions/notfound.png')
category = models.ForeignKey(Category, on_delete=models.CASCADE,related_name="listings")
is_active = models.BooleanField()
highest_bid = models.ForeignKey("self".bids.aggregate(Max('price')).first()) #["price__max"]
# highest bid
# listing created on xxxx-xx-xx
def __str__(self):
return f"{self.title}"
class Bid(models.Model):
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name="bids")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="bids")
price = models.PositiveIntegerField()
# time TODO
def __str__(self) -> str:
return f"Bid #{self.id}"
Вы можете просто использовать @property, чтобы вернуть такое вычисляемое поле
class Listing(models.Model):
# Some fields
@property
def highest_bid(self):
# Access the Listing bids by reverse foreign key and retrieve the first with highest price
return self.bids.order_by('-price').first()
Примечание : Каждый раз, когда вы делаете listing.highest_bid
функция будет выполняться, чтобы вернуть результат (Dynamic)