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)
Вернуться на верх