如何在 Django models.py 中引用 self.something?

How to reference self.something in Django models.py?

我正在开发一个使用模型的 Django 项目。如果有更好的解决方案,我想以某种方式始终访问该列表的最高出价(如 listing.highest_bid)或其他方式。我在下面的代码片段中尝试的 highest_bid 似乎不起作用,它给了我一个 AttributeError(AttributeError:'str' 对象没有属性 '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 = self.bids.aggregate(Max('price'))

        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}"

您可以简单地使用 @属性 到 return 计算字段

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 函数都会执行到 return 结果(动态)