Как я могу отобразить цену каждого товара Django
Я пытаюсь вернуть цену каждого товара, но в зависимости от этих условий.
i. Если ни один пользователь не сделал ставку на товар, возвращается начальная ставка
.
ii. Если пользователь сделал ставку на товар, обновить начальную ставку до новой суммы ставки
Я попробовал следующее, но это не отражает новую сумму, когда пользователь делает ставку на товар.
DETAILS.HTML
<div>
<h5>{{ listing.title }}</h5>
<hr>
<p>{{ listing.description }}</p>
<hr>
<p>Current price: ${{ listing.bid }}</p>
VIEWS.PY
def make_bid(request, listing_id):
listing = Auction.objects.get(pk=listing_id)
bid_item = Bids.objects.filter(auction=listing).order_by('-new_bid').first()
#if theres no bid available, use starting bid, if available, update to the latest bid
if bid_item == None:
bid = listing.starting_bid
else:
bid = bid_item.new_bid
if request.method == 'POST':
bid_form = BidForm(request.POST, listing=listing)
if bid_form.is_valid():
accepted_bid = bid_form.save(commit=False)
accepted_bid.user = request.user
accepted_bid.save()
messages.success(request, 'Successfully added your bid')
return redirect('listing_detail', listing_id=listing_id)
else:
context = {
"bid_form": bid_form,
"bid": bid,
"bid_item": bid_item,
"listing": listing
}
return render(request, 'auctions/details.html', context)
return render(request, 'auctions/details.html', bid_form = BidForm())
FORMS.PY
class BidForm(forms.ModelForm):
class Meta:
model = Bids
fields = ['new_bid']
labels = {
'new_bid': ('Bid'),
}
def __init__(self, *args, **kwargs):
self.listing = kwargs.pop('listing', None)
super().__init__(*args, **kwargs)
def clean_new_bid(self):
new_bid = self.cleaned_data['new_bid']
starting_bid = self.listing.starting_bid
if new_bid <= starting_bid:
raise ValidationError("New bid must be greater than the previous bid")
return new_bid
INDEX.HTML
<h5>{{ listing.title|truncatewords:3 }}</h5>
<h6>${{ listing.accepted_bid }}</h6>
<small>{{ listing.description|truncatewords:6 }}</small>