我得到的错误是:“视图auctions.views.new_bid没有返回HttpResponse对象,而是返回了None。”
有人知道它为什么返回None吗?任何帮助都是非常感谢的。
此视图将允许用户对网站上的项目进行竞价,类似于ebay。new_bid允许他们出价,而listingpage显示的是实际项目的页面。列表页面加载正常,当我在竞价表单中输入一个数字并保存时,我只是得到了错误。在站点的/admin部分,我可以看到号码没有保存。
views.py:
def new_bid(request, listingid):
if request.method == 'POST':
auction_to_add = Listings.objects.get(id=listingid)
total_bid = request.POST.get("total_bid")
bid = Bid.objects.create(user=request.user, listingid=auction_to_add, bid=total_bid)
auction_to_add.bids.add(bid)
auction_to_add.last_bid = bid
auction_to_add.save()
return HttpResponse('success')
def listingpage(request, listingid):
comments = Comments.objects.filter(listingid=listingid)
item = Listings.objects.get(id=listingid)
return render(request, "auctions/listing.html", {
"listingid": listingid,
"comments": comments,
"product": item,
})列表页面的html的一部分,允许用户出价:
<form id="addBid" data-startingbid="{{product.starting_bid}}" data-lastbid="
{{product.last_bid.bid}}" data-auction="{{product.id}}" action="{% url 'new_bid'
product.id %}">
{% csrf_token %}
<input type="number" name="totalBid" id="newBid" placeholder="Total bid">
<button class="button-auction" type="submit">Send</button>
</form>urls.py
urlpatterns = [
path("listings/<int:listingid>", views.listingpage, name="listingpage"),
path("new_bid/<int:listingid>", views.new_bid, name="new_bid"),
]models.py
class Bid(models.Model):
user = models.CharField(max_length=64)
title = models.CharField(max_length=64)
bid = models.IntegerField(blank=True, null=True)
listingid = models.ForeignKey('Listings', on_delete=models.CASCADE,
related_name='listing_for_bid')
class Listings(models.Model):
title = models.CharField(max_length=64)
description = models.TextField(max_length=250)
starting_bid = models.IntegerField()
bids = models.ManyToManyField('Bid', related_name='bids_in_the_auction', blank=True)
last_bid = models.ForeignKey('Bid', on_delete=models.CASCADE,
related_name='last_bid_for_the_auction', blank=True,
null=True)发布于 2021-01-18 07:29:48
当请求方法不是POST时,您的new_bid(request, listingid)函数不返回任何内容(因此返回None)。
现在,您没有在表单中指定方法,因此它缺省为GET。以下更改应该可以做到这一点:
<form id="addBid" data-startingbid="{{product.starting_bid}}" data-lastbid="
{{product.last_bid.bid}}" data-auction="{{product.id}}" action="{% url 'new_bid'
product.id %}" method="POST">
{% csrf_token %}
<input type="number" name="totalBid" id="newBid" placeholder="Total bid">
<button class="button-auction" type="submit">Send</button>
</form>https://stackoverflow.com/questions/65766923
复制相似问题