Django поднял 'django.utils.datastructures.MultiValueDictKeyError: 'image'' при загрузке изображения
Я пытался загрузить изображение через форму, но django выдал ошибку "django.utils.datastructures.MultiValueDictKeyError: 'image'" в строке 106, views.py. Я не знаю, что происходит, и почему выдает ошибку, когда я отправляю через пользовательскую форму, но это не происходит через интерфейс администратора. Кто-нибудь может помочь?
Мой код:
models.py:
class listings(models.Model):
is_sold = models.BooleanField(
default=False, verbose_name="Is Sold")
title = models.CharField(max_length=100)
description = models.TextField(max_length=750)
price = models.FloatField()
user = models.ForeignKey(to=User, on_delete=models.CASCADE)
category = models.IntegerField(default=0, choices=categoryChoices)
image = models.ImageField(upload_to='uploads/', blank='True', null='True')
time_posted = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('-time_posted',)
def get_image(self):
if self.image:
return 'http://127.0.0.1:8000' + self.image.url
return ''
def __str__(self):
return f"{self.id}: {self.title}"
views.py:
def add_auction(request):
if request.method == "POST":
title = request.POST["title"]
description = request.POST["description"]
price = request.POST["price"]
image = request.POST["image"]
category = request.POST["category"]
user = request.user
listing = listings(title=title, description=description,
price=price, image=image, category=category, user=user)
try:
listing.save()
except ValueError:
return render(request, "auctions/add_auction.html", {
"message": "Error adding auction."
})
return HttpResponseRedirect(reverse("index"))
else:
return render(request, "auctions/add_auction.html")
template:
<h1>Add Listing</h1>
<form action="{% url 'add_auction' %}" method="POST">
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" placeholder="Title">
</div>
<div class="form-group">
<label for="description">Description</label>
<textarea class="form-control" id="description" name="description" rows="3"></textarea>
</div>
<div class="form-group">
<label for="price">Price</label>
<input type="float" class="form-control" id="price" name="price" placeholder="Price">
</div>
<div class="form-group">
<label for="image">Image</label>
<input type="image" class="form-control" id="image" name="image" placeholder="Image">
</div>
<div class="form-group">
<label for="category">Category</label>
<select class="form-control" id="category" name="category">
<option value="1">Books</option>
<option value="2">Clothing</option>
<option value="3">Electronics</option>
<option value="4">Furniture</option>
<option value="5">Home</option>
<option value="6">Toys</option>
<option value="7">Vehicles</option>
<option value="8">Other</option>
</select>
{% csrf_token %}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Может ли кто-нибудь помочь мне?
Поправьте эти вещи
views.py
if request.method == "POST":
title = request.POST["title"]
description = request.POST["description"]
price = request.POST["price"]
image = request.FILES["image"] # <----- need to be correct this
Спасибо за все ответы
Я нашел решение
в HTML
<form action="" method="POST" enctype="multipart/form-data">
</form>
<
Проверить эти вещи правильные или нет ???
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
(urls.py) из папки проекта
from django.conf.urls.static import static
from django.urls import path
urlpatterns = [
path("", include("myapp.urls")),
path('admin/', admin.site.urls),
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)