Я получил эту ошибку Django MultiValueDictKeyError при нажатии на кнопку "просмотр"
Мне нужна помощь Я получил ошибку в моем проекте, когда я нажимаю на "кнопку просмотра", чтобы открыть пост, я получаю эту ошибку :
MultiValueDictKeyError at /Post/21
'bid'
Метод запроса: GET
URL запроса: http://127.0.0.1:8000/Post/21
Версия Django: 3.2.8
Тип исключения: MultiValueDictKeyError
Значение исключения:
'bid'
Я думаю, что что-то не так с моим "viewList def" из-за ставки: пожалуйста, взгляните на мой код
view.py (класс формы)
class BidForm(ModelForm):
class Meta:
model = Bid
fields = ['bid']
def viewList(request, id):
# check for the watchlist
listing = Post.objects.get(id=id)
user = User.objects.get(username=request.user)
if listing.watchers.filter(id=request.user.id).exists():
is_watched = True
else:
is_watched = False
if not listing.activate:
if request.POST.get('button') == "Close":
listing.activate = True
listing.save()
else:
price = float(request.POST['bid'])
bids = listing.bids.all()
if user.username != listing.creator.username:
if price <= listing.startBid:
return render(request, 'auctions/item.html', {
"listing": listing,
'form': BidForm(),
"message": "Error! Your bid must be largest than the current bid!",
})
form = BidForm(request.POST)
if form.is_valid():
bid = form.save(commit=False)
bid.user = user
bid.save()
listing.bids.add(bid)
listing.bid = price
listing.save()
else:
return render(request, 'auctions/item.html', {
"form": BidForm()
})
return HttpResponseRedirect(reverse('viewList', args=(listing.id,)))
context = {
'listing': listing,
'comment_form': CommentForm(),
'comments': listing.get_comments.all(),
'is_watched': is_watched,
'form': BidForm()
}
return render(request, 'auctions/item.html', context)
model.py
class Bid(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
bid = models.FloatField()
time = models.DateTimeField(default=timezone.now)
class Post(models.Model):
# data fields
title = models.CharField(max_length=64)
textarea = models.TextField()
# bid
price = models.FloatField(default=0)
currentBid = models.FloatField(blank=True, null=True)
imageurl = models.CharField(max_length=255, null=True, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, default="No Category Yet!", null=True, blank=True)
creator = models.ForeignKey(User, on_delete=models.PROTECT, related_name="all_creators_listings")
watchers = models.ManyToManyField(User, blank=True, related_name='favorite')
date = models.DateTimeField(auto_now_add=True)
# for activated the Category
activate = models.BooleanField(default=False)
bids = models.ManyToManyField(Bid,)
def __str__(self):
return f"{self.title} | {self.textarea} | {self.date.strftime('%B %d %Y')}"
index.html (mainFile)
{% for listing in items %}
{% if not listing.activate %}
<div class="col-sm-4">
<div class="card my-2">
<img src="{{listing.imageurl}}" class="img-fluid">
<div class="card-body">
<div class="text-center py-2">
<h5 class="card-title text-info">{{listing.title}}</h5>
<p class="alert alert-info">{{listing.textarea}}</p>
<ul class="list-group">
<li class="list-group-item list-group-item-info">category: {{listing.category.name}}</li>
<li class="list-group-item list-group-item-info">$
{%if listing.currentBid %}
{{ listing.currentBid }}
{% else %}
{{ listing.price }}
{% endif %}
</li>
<li class="list-group-item list-group-item-info">Created by: {{listing.creator}}</li>
</ul>
</div>
<!-- Buttons -->
<div class="row">
<div class="col">
<a href="{% url 'viewList' listing.id %}" class="btn btn-dark btn-sm m-1 btn-block">View</a>
</div>
</div>
</div>
<div class="card-footer">
<small class="text-muted">Created since:{{listing.date}}</small>
</div>
</div>
</div>
{% endif %}
{% endfor %}
item.html (страница для представления постов)
<!-- Close Listing -->
<div class="close-btn">
{% if listing.activate %}
<div class="alert alert-info" role="alert">
This listing is no longer available!
</div>
{% endif %}
</div>
<div class="card-body">
<ul class="list-group">
<div class="info">
<li class="list-group-item mb-2">Description:<br>{{listing.textarea}}</li>
<li class="list-group-item mb-2">category: {{listing.category.name}}</li>
<li class="list-group-item mb-2"><h5>Start bid: {{listing.price}}$</h5></li>
</div>
<div class="newbid">
<p>{{ message }}</p>
{% if listing.activate %}
<li><strong>Winner: </strong>{{ listing.bids.last.user.username }}</li>
{% endif %}
{% if user.username == listing.owner.username and not listing.activate %}
<form action="{% url 'viewList' listing.id %}" method="POST">
{% csrf_token %}
<button type="submit" name="button" class="btn btn-danger" value="Close">Close</button>
</form>
{% endif %}
</div>
</ul>
</div>