Форма 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(),
    })
Вернуться на верх