Skip to content

Commit

Permalink
Improved handling of different post requests from listing
Browse files Browse the repository at this point in the history
  • Loading branch information
Ekaterina-Vititneva committed Aug 10, 2024
1 parent 0d1a608 commit 895060b
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ <h2>Listing: {{ listing.title }}</h2>
<div class = "bid">
<h4 class="listing-bid">{{ listing.bid }}€</h4>
{% if user.is_authenticated %}
<form action="{% url 'place_bid' listing.title %}" method="post" class="bid-form">
<form action="{% url 'listing' listing.title %}" method="post" class="bid-form">
<div class="mb-3">
{% csrf_token %}
{{ form.as_p }}
Expand Down
1 change: 0 additions & 1 deletion project_2/commerce/auctions/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
path("register", views.register, name="register"),
path("create_listing", views.create_listing, name="create_listing"),
path("listing/<str:title>", views.listing, name="listing"),
path("listing/<str:title>/bid/", views.place_bid, name="place_bid"),
path("categories", views.categories, name="categories"),
path("watchlist", views.watchlist, name="watchlist"),
]
95 changes: 36 additions & 59 deletions project_2/commerce/auctions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,77 +87,54 @@ def create_listing(request):

return render(request, "auctions/create_listing.html", {"form": form})

def listing(request, title):
listing = Listing.objects.get(title=title)
return render(request, "auctions/listing.html", {
"listing": listing
})

def listing(request, title):
listing = get_object_or_404(Listing, title=title)
user = request.user

if request.method == "POST":
if 'add_to_watchlist' in request.POST:
if listing not in user.watchlist.all():
user.watchlist.add(listing)
messages.success(request, "Listing added to your watchlist.")
if 'add_to_watchlist' in request.POST or 'remove_from_watchlist' in request.POST:
# Handle watchlist modification
if 'add_to_watchlist' in request.POST:
if listing not in user.watchlist.all():
user.watchlist.add(listing)
elif 'remove_from_watchlist' in request.POST:
if listing in user.watchlist.all():
user.watchlist.remove(listing)
return redirect('listing', title=listing.title)

elif 'bid' in request.POST:
# Handle bid submission
form = BidForm(request.POST)
if form.is_valid():
bid_amount = form.cleaned_data['bid']
if bid_amount > listing.bid:
listing.bid = bid_amount
listing.last_modified_by = request.user
listing.save()

new_bid = Bid(
price=bid_amount,
bidder=request.user,
listing=listing,
)
new_bid.save()

messages.success(request, "Your bid was placed successfully!")
return redirect('listing', title=listing.title)
else:
messages.error(request, "Your bid must be higher than the current bid.", extra_tags='danger')
else:
messages.info(request, "Listing is already in your watchlist.")
elif 'remove_from_watchlist' in request.POST:
if listing in user.watchlist.all():
user.watchlist.remove(listing)
messages.success(request, "Listing removed from your watchlist.")
else:
messages.info(request, "Listing was not in your watchlist.")

return render(request, "auctions/listing.html", {
"listing": listing,
"form": BidForm(), # Assuming you're passing a BidForm as well
})

def place_bid(request, title):
listing = get_object_or_404(Listing, title=title)
messages.error(request, "Please enter a valid bid.", extra_tags='danger')

if request.method == "POST":
form = BidForm(request.POST)
if form.is_valid():
bid_amount = form.cleaned_data['bid']

if bid_amount > listing.bid:
listing.bid = bid_amount
listing.last_modifed_by = request.user
listing.save()

new_bid = Bid(
price=bid_amount,
bidder=request.user,
listing=listing,
)
new_bid.save()

messages.success(request, "Your bid was placed successfully!")
return redirect('listing', title=listing.title)
else:
messages.error(request, "Your bid must be higher than the current bid.", extra_tags='danger')
else:
messages.error(request, "Please enter a valid bid.", extra_tags='danger')
else:
form = BidForm()

return render(request, "auctions/listing.html", {"listing": listing, "form": form})

def watchlist_add(request, listing_id):
listing = get_object_or_404(Listing, id=listing_id)
user = request.user
return render(request, "auctions/listing.html", {
"listing": listing,
"form": form,
})

if listing not in user.watchlist.all():
user.watchlist.add(listing)
messages.success(request, "Listing added to your watchlist.")
else:
messages.info(request, "Listing is already in your watchlist.")

return redirect('listing', title=listing.title)

def categories(request):
return render(request, "auctions/categories.html", {
Expand Down

0 comments on commit 895060b

Please sign in to comment.