Форма Django перенаправляет меня на неправильный URL, если входные данные недействительны
Я очень новичок в Django и работаю над сайтом торговой площадки. У меня есть несколько форм на главной странице листинга, одна для приема ставок, другая для оставления комментариев. Форма для торгов, если ставка слишком низкая, должна перенаправлять пользователя на страницу объявления с отображением ошибки. На самом деле происходит так, что URL изменяется и отображается другой вид той же самой страницы объявления. Я уверен, что это можно легко решить с помощью JavaScript и игнорировать перенаправление вместе, но я бы предпочел выяснить, почему это происходит, а затем попытаться обойти это.
При вводе недействительных данных я ожидаю возврата на текущую страницу "listing/product_name", но вместо этого я попадаю на "bid/product_name". То же самое происходит с формой комментариев "/comment/product_name", эта форма также не хочет проходить валидацию.
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("ended", views.ended, name="ended"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("bid/<str:listing>", views.bid, name="bid"),
path("register", views.register, name="register"),
path("watchlist", views.watchlist, name="watchlist"),
path("close/<str:listing>", views.close, name="close"),
path("newListing", views.newListing, name="newListing"),
path("listing/<str:listing>", views.listing, name="listing"),
path("comment/<str:listing>", views.comment, name="comment"),
path("change_watchlist/<str:listing>", views.change_watchlist, name="change_watchlist"),
]
views.py. Я знаю, что есть некоторая неразбериха с newBid = form.save(commit=False) перед оператором if, но я продолжал получать ошибки, говорящие, что данные не могут быть проверены иначе.
@login_required
def bid(request, listing):
# Use current listing in bid form and save bid
listing = AuctionListings.objects.get(name=listing)
form = NewBidForm(request.POST)
newBid = form.save(commit=False)
bid = newBid.bid
# Validate bid with current and starting bid values. Save new bid if it is valid.
if (listing.startingBid == listing.currentBid and bid >= listing.startingBid) or bid > (listing.currentBid + .24):
listing.currentBid = bid
newBid.listing = listing
newBid.user = request.user
newBid.save()
listing.save()
return HttpResponseRedirect(reverse("listing", args=[listing.name]))
else:
return render(request, "auctions/listing.html", {
"listing": listing,
"form": NewBidForm(),
"error": True,
"newComment": NewCommentForm(),
})
def listing(request, listing):
# Filter listings by the name of the listing clicked on and display listing specific page
item = AuctionListings.objects.filter(name=listing)
listing = item.first()
comments = Comments.objects.filter(listing=listing)
now = timezone.now()
if request.user in listing.watchers.all():
watched = True
else:
watched = False
if request.user == listing.seller:
seller = True
else:
seller = False
if request.user == listing.buyer:
buyer = True
else:
buyer = False
return render(request, "auctions/listing.html", {
"listing": listing,
"form": NewBidForm(),
"watched": watched,
"seller": seller,
"buyer": buyer,
"now": now,
"comments": comments,
"newComment": NewCommentForm(),
})