Использование полей из агрегированного набора QuerySet в шаблоне django

Итак, я получил результат QuerySet от агрегатной функции для отображения в моем низкопробном клоне eBay. Но моя проблема заключается в отображении определенных полей в шаблоне Django так, как я хочу, например, я хочу отобразить имя пользователя и ставку самого высокого участника торгов. Когда я вызываю сам объект, например, {{winner}}, то он отображается. Но когда я пытаюсь получить доступ к его полям, например, так {{winner.user_id.username}}, я не получаю никакого результата, хотя QuerySet выполняется.

Когда я пытаюсь получить поле, подобное этому (winner.user_id.username): enter image description here

Когда я звоню только winner: enter image description here

models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

CATEGORIES = [
        ('Appliances', 'Appliances'),
         ('Tech', 'Tech'), 
         ('Gaming', 'Gaming'), 
         ('Fashion', 'Fashion'), 
         ('Sports and Fitness','Sports and Fitness'), 
         ('Other','Other'),
         ("Hygiene and Medicine","Hygiene and Medicine"), 
         ("Stationery","Stationery"),
        ('Decor', 'Decor'), 
        ('Furniture','Furniture'), 
        ('Cars and Mechanical Things','Cars and Mechanical Things'), 
        ("Tools","Tools")
    ]

# Create models here
class User(AbstractUser):
    pass

class Auction_Listing(models.Model):
    user_id = models.IntegerField(default=1)
    list_title = models.CharField(max_length=64)
    desc = models.TextField(max_length=600)
    img_url = models.URLField(max_length=200, null=True, blank=True)
    start_bid = models.IntegerField()
    category = models.CharField(choices=CATEGORIES, max_length=35, null=True, blank=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return f"ID:{self.id}, {self.list_title}: {self.desc}, {self.start_bid} posted by user:{self.user_id} in Category:{self.category}, url:{self.img_url}"

class Bids(models.Model):
    user_id = models.ForeignKey('User', on_delete=models.CASCADE)
    auctions = models.ForeignKey('Auction_Listing', on_delete=models.CASCADE, default=1,related_name='bidauc')
    bid = models.IntegerField()

    def __str__(self):
        return f"ID:{self.id}, Bid {self.bid} posted by user:{self.user_id} on auction {self.auctions}"

class Auction_Comments(models.Model):
    user_id = models.ForeignKey('User', on_delete=models.CASCADE)
    comment = models.TextField(max_length=324, default='N/A')
    auctions = models.ForeignKey('Auction_Listing', on_delete=models.CASCADE, default=1,related_name='comauc')

    def __str__(self):
        return f"ID:{self.id}, Comment: {self.comment} posted by user:{self.user_id} on auction {self.auctions}"

class Watchlist(models.Model):
    user_id = models.ForeignKey('User', on_delete=models.CASCADE)
    auctions = models.ForeignKey('Auction_Listing', on_delete=models.CASCADE, default=1, related_name='watchauc')

    def __str__(self):
        return f"ID:{self.id}, user:{self.user_id} on auction {self.auctions}"

views.py

def render_listing(request, title):
    if request.method == "POST":
        form = BidForm(request.POST)
        bid = int(request.POST['new_bid'])
        listing = Auction_Listing.objects.get(list_title=title)
        comments = Auction_Comments.objects.filter(auctions=listing)
        if bid <= listing.start_bid:
            error = True
        else:
            error = False
            listing.start_bid = bid
            listing.save()
            new_bid = Bids(user_id=request.user, auctions=listing, bid=bid)
            new_bid.save()
        return render(request, 'auctions/listing.html', {
            "listing": listing,
            "form": form,
            "comments": comments,
            "error": error,
            "comform": CommentForm()
        })
    else:
        form = BidForm()
        comform = CommentForm()
        listing = Auction_Listing.objects.get(list_title=title)
        comments = Auction_Comments.objects.filter(auctions=listing)
        high_bid = Bids.objects.filter(auctions=listing).aggregate(maximum=Max("bid"))
        winner = Bids.objects.filter(auctions=listing, bid=high_bid['maximum'])
        print(winner)
        return render(request, 'auctions/listing.html', {
            "listing": listing,
            "form": form,
            "comments": comments,
            "error": False,
            "comform": comform,
            "winner": winner
        })

код шаблона:

Заранее спасибо за помощь!
С уважением
PrimeBeat

Это даст QuerySet. Вы можете увидеть на вашем втором изображении.

Набор QuerySet представляет собой коллекцию объектов из вашей базы данных.

winner = Bids.objects.filter(auctions=listing, bid=high_bid['maximum'])

Вам нужно выполнить итерации по этому QuerySet, получить любые данные, которые вы хотите, и показать их в вашем шаблоне.

{% for win in winner %}
 <p>{{ win.user_id.username }}</p>
{% endfor %}
Вернуться на верх