首页 > 解决方案 > 如果块在 python 的 django 视图中不起作用

问题描述

def listingpage(request,title):   
    listings = Auctionlisting.objects.get(title=title)
    if request.method == "POST":
        form = Bidform(request.POST)
        if form.is_valid():
            bidmade = request.POST.get('bidmade')
            user = request.POST.get('username')
            username = User.objects.get(username=user)
            bid = Bid(user=username,bidmade=bidmade,bidobject=listings)
            if Bid.user != username and Bid.bidobject != listings:
                 bid.save()
                 return render(request, "auctions/listingpage.html",{
                 "listings":listings,
                 "bidform":form,
                 "message":"Your bid has been added in the auction..."
                 })
            
            else:
                return render(request,"auctions/error.html")
    else:
        form = Bidform()
    return render(request, "auctions/listingpage.html",{
    "listings":listings,
    "bidform":form
    })

谁能告诉我这段代码有什么问题。如果代码不起作用,即使它的用户名和列表已经存在于投标数据库中,它也会继续添加投标。我正在使用此代码,以防止多次通过单个用户名对对象进行投标。

标签: pythonif-statementdjango-modelsdjango-formsdjango-views

解决方案


所以你只想Bid在用户没有为指定列表创建出价的情况下创建一个新的,对吧?

bid, created = Bid.objects.get_or_create(user=username, bidobject=listings,
                                         defaults={"bidmade" : bidmade})
if created:
    return render(...)
else:
    #oops, that user has already bid on the listing, take appropriate action

    

推荐阅读