Django:如何访问 html 模板中的相关对象最大值
Django: How do I access a related object max value in html template
我正在尝试显示要拍卖的项目列表。对于每个项目,我还想显示当前的出价。当前出价应该是最大值或最后添加到每个列表的出价 class。
如何在我的 HTML 中呈现 Listing.objects.all() 集合中每个项目的最大值 Bid.bid_price?
以下是我的模型、视图和 HTML。
型号:
class Listing(models.Model):
title = models.CharField(max_length=65, default="")
description = models.CharField(max_length=200, default="")
category = models.CharField(max_length=65, default="")
image = models.ImageField(blank=True, null=True, upload_to='images/')
listed_by = models.ForeignKey(User, on_delete=models.CASCADE, default="")
created_dt_tm = models.DateTimeField(auto_now_add=False, default=timezone.now())
class Bids(models.Model):
bidder = models.ForeignKey(User, on_delete=models.CASCADE, default="")
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, default="", related_name="bids")
bid_price = models.IntegerField(default=0)
created_dt_tm = models.DateTimeField(auto_now_add=False, default=timezone.now())
观看次数:
def index(request):
return render(request, "auctions/index.html", {
"listings": Listing.objects.all()
})
HTML:
{% for listing in listings %}
<div style=display:flex;margin:30px;border:lightseagreen;border-style:solid;height:150px;border-width:1px;width:40%>
<div style=width:25%;display:flex;>
{% if listing.image %}
<img src="{{listing.image.url}}" alt="Cannot display image" height="100px" style="margin-left:50px;">
{% endif %}
</div>
<div style=width:15%></div>
<div style=width:30%>
<div><a href="{% url 'listing' listing.title %}">{{listing.title}}</a></div>
<div style=font-size:10pt;>Description: {{listing.description}}</div>
<div style=font-size:10pt;>Category: {{listing.category}}</div>
<div style=font-size:10pt;>Current Price: ${{ listing.bids_object.bid_price }}</div>
<div style=font-size:10pt;>Created by:<br>{{listing.listed_by}}</div>
</div>
<div style=width:30%>
<div style=margin:10px;>
</div>
</div>
</div>
{% endfor %}
{% endblock %}
您需要的是 django 的 annotate
功能来查找每个清单的最大值。
from django.db.models import Max
def index(request):
return render(request, "auctions/index.html", {
"listings": Listing.objects.all().values().annotate(
max_bid_amount = Max('bids__bid_price')
)
})
在您的 html 中,您可以为 max_bid 添加以下行。
<div style=font-size:10pt;>Max Bid Amount:<br>{{listing.max_bid_amount}}</div>
我正在尝试显示要拍卖的项目列表。对于每个项目,我还想显示当前的出价。当前出价应该是最大值或最后添加到每个列表的出价 class。
如何在我的 HTML 中呈现 Listing.objects.all() 集合中每个项目的最大值 Bid.bid_price?
以下是我的模型、视图和 HTML。
型号:
class Listing(models.Model):
title = models.CharField(max_length=65, default="")
description = models.CharField(max_length=200, default="")
category = models.CharField(max_length=65, default="")
image = models.ImageField(blank=True, null=True, upload_to='images/')
listed_by = models.ForeignKey(User, on_delete=models.CASCADE, default="")
created_dt_tm = models.DateTimeField(auto_now_add=False, default=timezone.now())
class Bids(models.Model):
bidder = models.ForeignKey(User, on_delete=models.CASCADE, default="")
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, default="", related_name="bids")
bid_price = models.IntegerField(default=0)
created_dt_tm = models.DateTimeField(auto_now_add=False, default=timezone.now())
观看次数:
def index(request):
return render(request, "auctions/index.html", {
"listings": Listing.objects.all()
})
HTML:
{% for listing in listings %}
<div style=display:flex;margin:30px;border:lightseagreen;border-style:solid;height:150px;border-width:1px;width:40%>
<div style=width:25%;display:flex;>
{% if listing.image %}
<img src="{{listing.image.url}}" alt="Cannot display image" height="100px" style="margin-left:50px;">
{% endif %}
</div>
<div style=width:15%></div>
<div style=width:30%>
<div><a href="{% url 'listing' listing.title %}">{{listing.title}}</a></div>
<div style=font-size:10pt;>Description: {{listing.description}}</div>
<div style=font-size:10pt;>Category: {{listing.category}}</div>
<div style=font-size:10pt;>Current Price: ${{ listing.bids_object.bid_price }}</div>
<div style=font-size:10pt;>Created by:<br>{{listing.listed_by}}</div>
</div>
<div style=width:30%>
<div style=margin:10px;>
</div>
</div>
</div>
{% endfor %}
{% endblock %}
您需要的是 django 的 annotate
功能来查找每个清单的最大值。
from django.db.models import Max
def index(request):
return render(request, "auctions/index.html", {
"listings": Listing.objects.all().values().annotate(
max_bid_amount = Max('bids__bid_price')
)
})
在您的 html 中,您可以为 max_bid 添加以下行。
<div style=font-size:10pt;>Max Bid Amount:<br>{{listing.max_bid_amount}}</div>