Не удается добавить самую высокую ставку на страницу в Django

avatar
Leon_idas
8 августа 2021 в 19:16
48
1
1

Я делаю веб-сайт аукциона Django. Проблема в том, что я понятия не имею, как добавить самую высокую ставку на индексную страницу, чтобы она обновлялась каждый раз, когда пользователь делает ставку на другой странице.

views.py:

def index(request):
    index = listing.objects.filter(end_auction=False)
    number=len(index)
    return render(request, "auctions/index.html", {"list":index, "number":number})

models.py:

class listing(models.Model):
    Title = models.CharField(max_length=50)
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
    Description = models.CharField(max_length=300)
    price = models.DecimalField(max_digits=6, null=True, decimal_places=2)
    image=models.ImageField( blank = True,
                          null = True,
                          upload_to ='')
    category = models.ForeignKey(category, on_delete=models.CASCADE, related_name="categories")
    end_auction=models.BooleanField(default=False)
    def __str__(self):
        return f"{self.Title}"

class bid(models.Model):
    listing = models.ForeignKey(listing, on_delete=models.CASCADE)
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
    bid = models.DecimalField(max_digits=6, null=True, decimal_places=2)
    def __str__(self):
        return f"{self.bid}, {self.listing}, {self.user}"

Имейте в виду, что я не включил весь код, который довольно длинный. Если вы хотите, чтобы я что-то добавил, просто дайте мне знать! Ответ будет принят с благодарностью! :)

Источник

Ответы (1)

avatar
Willem Van Onsem
8 августа 2021 в 19:18
0

Вы можете .annotate(…) [Django-doc] с:

from django.db.models import Max

def index(request):
    index = listing.objects.filter(maxbid=Max('bid__bid')).filter(end_auction=False)
    number=len(index)
    return render(request, "auctions/index.html", {"list":index, "number":number})

Объекты listing, возникающие из этого QuerySet, будут иметь дополнительный атрибут .maxbid, который является самым большим из ставок.

Таким образом, в шаблоне вы можете отобразить это с помощью:

{% for item in list %}
    {{ item.Title }}: {{ item.maxbid }}
{% endfor %}
Leon_idas
8 августа 2021 в 20:06
0

Это учитывая вариант, что у меня есть maxbid ForeignKey в моей модели листинга, верно?

Willem Van Onsem
8 августа 2021 в 20:39
0

@Leon_idas: нет, это составит LEFT OUTER JOIN, поэтому будет запрашиваться отношение в «обратном порядке». Итак, без ForeignKey с именем maxbid.