如何在 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 结果(动态)
我正在开发一个使用模型的 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 结果(动态)