首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django错误:“视图auctions.views.new_bid没有返回HttpResponse对象,而是返回了None。”

Django错误:“视图auctions.views.new_bid没有返回HttpResponse对象,而是返回了None。”
EN

Stack Overflow用户
提问于 2021-01-18 07:08:01
回答 1查看 60关注 0票数 0

我得到的错误是:“视图auctions.views.new_bid没有返回HttpResponse对象,而是返回了None。”

有人知道它为什么返回None吗?任何帮助都是非常感谢的。

此视图将允许用户对网站上的项目进行竞价,类似于ebay。new_bid允许他们出价,而listingpage显示的是实际项目的页面。列表页面加载正常,当我在竞价表单中输入一个数字并保存时,我只是得到了错误。在站点的/admin部分,我可以看到号码没有保存。

views.py:

代码语言:javascript
复制
    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的一部分,允许用户出价:

代码语言:javascript
复制
<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

代码语言:javascript
复制
urlpatterns = [

    path("listings/<int:listingid>", views.listingpage, name="listingpage"),
    path("new_bid/<int:listingid>", views.new_bid, name="new_bid"),
]

models.py

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-01-18 07:29:48

当请求方法不是POST时,您的new_bid(request, listingid)函数不返回任何内容(因此返回None)。

现在,您没有在表单中指定方法,因此它缺省为GET。以下更改应该可以做到这一点:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65766923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档