Ошибка Django: «Просмотр auctions.views.new_bid не вернул объект HttpResponse. Вместо этого он вернул None».

#django #django-models #django-views #django-templates

#джанго #django-модели #django-просмотры #django-шаблоны

Вопрос:

Я получаю сообщение об ошибке: «Просмотр 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)
 

Комментарии:

1. Вы сделали запрос GET, поскольку вы не указали method="post" в <form> .

Ответ №1:

Ваша new_bid(request, listingid) функция ничего не возвращает (поэтому возвращает None), когда метод запроса не POST .

Теперь вы не указали метод в своей форме, и поэтому по умолчанию используется 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>
 

Комментарии:

1. Спасибо @dacx — я добавил ваше изменение, и это определенно помогло. Однако код в views.py по-прежнему не принимает номер, который я отправляю в качестве заявки. Он возвращает None, и я не знаю почему. Я не могу использовать отладчик в своей IDE, потому что он использует фреймворк Django — любой совет?