【问题标题】:Django: How do I access a related object max value in html templateDjango:如何访问 html 模板中的相关对象最大值
【发布时间】:2022-01-23 02:53:34
【问题描述】:

我正在尝试显示要拍卖的物品列表。对于每个项目,我还想显示当前的出价。当前出价应该是最大值或最后添加到每个单独列表的 Bids 类。

如何在我的 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 django-models


    【解决方案1】:

    您需要的是 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>
    
    

    【讨论】:

    • 谢谢@shivankgtm!这按预期工作。非常感谢。
    • @Brewcious 欢迎,请将解决方案标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    • 2011-06-05
    • 2021-01-06
    • 2012-06-07
    • 2012-07-02
    相关资源
    最近更新 更多