Home > Mobile >  Django: Exception Value: The 'image' attribute has no file associated with it
Django: Exception Value: The 'image' attribute has no file associated with it

Time:12-09

Hi everyone I'm trying to create an auction system with Django.

But when I go to the item profile, Django sends me an error:

enter image description here

Exception Value:
The 'image' attribute has no file associated with it.

auction.html

{% extends "base.html" %}
{% block content %}
{% load static %}
   <div >
        <h1>OPEN AUCTIONS</h1>
    </div>
        <div >
        <div >
                    {% for item in auction %}
            <div >
                <div  style="width: 25rem;">
                <div >
                    Auction {{item.id}}
                </div>
                  <img src="{{ item.image.url }}"  width="250" height="180">
                  <div >
                    <h3  style="text-align:center"  >{{ item.object }}</h3>
                    <p >{{item.description}}<br> Price: ${{ item.open_price}}<br>
                    End: {{ item.close_date }}</p>
                      <form method="POST">
                    {% csrf_token %}
                    <input type="number" name='auct_id' value={{item.id}}  readonly>
                    <button type="submit" >Go</button>
                    </form>
                  </div>
                </div>
            </div>
        {% endfor %}
        </div>
        </div>
        {% endblock %}

If I remove item from <img src="{{ item.image.url }}" width="250" height="180"> the page work correctly but the image doesn't display. Like this:

enter image description here

view.py

@login_required(login_url="login")
def auction(request):
    if request.user.is_superuser:
        messages.error(
            request, "super user can access to admin/ and new_auction page only"
        )
        return redirect("new_auction")
    auction = Auction.objects.filter(active=True)
    for data in auction:
        check = check_data(data.close_date)
        if check is False:
            data.active = False
            data.save()
            check_winner(
                request, data.id
            )
    check_prof = check_profile(
        request
    )  
    if check_prof is True:
        return redirect("profile")
    auctions_open = Auction.objects.filter(active=True)
    if request.method == "POST":
        form = request.POST
        auct_ids = form["auct_id"]
        auct_id = int(auct_ids)
        request.session["selected_id"] = auct_id
        return redirect("betting")
    else:
        return render(request, "auction/auction.html", {"auction": auctions_open})

models.py

from django.db import models
from django.contrib.auth.models import User
from datetime import datetime

# Create your models here.


class Auction(models.Model):
    object = models.CharField(max_length=50)
    description = models.CharField(max_length=256, default="")
    image = models.ImageField(upload_to="media/", null=True, blank=True)
    open_date = models.DateTimeField(auto_now_add=True)
    close_date = models.DateTimeField()
    total_bet = models.IntegerField(default=0)
    open_price = models.FloatField(
        default=0,
    )
    close_price = models.FloatField(default=0)
    winner = models.CharField(max_length=256, default="")
    active = models.BooleanField(default=True)
    json_details_file = models.TextField(default="")
    tx = models.CharField(max_length=256, default="")

    def __str__(self):
        return self.object

settings.py

MEDIA_ROOT = os.path.join((BASE_DIR), "media")
MEDIA_URL = "/media/"

CodePudding user response:

According to your model field image, you must give different name instead of media to upload_to.

Let's give different name to upload_to:

image = models.ImageField(upload_to="images/", null=True, blank=True) #here added images instead of media

And in your template:

instead of this:

<img src="{{ item.image.url }}"  width="250" height="180">

Try this way:

<img src="/media/{{ item.image }}"  width="250" height="180">

And now that images will display.

Note: don't forget to migrate after modifying upload_to="images/"

  • Related