Home > Software design >  What is the problem named, 'img' attribute has no file associated with it.?
What is the problem named, 'img' attribute has no file associated with it.?

Time:07-31

My motive is to show the product_image in the orderlist template. The ProductOrder works well and it also stores the product_image url in the img in the database. But when tried to show the image in the template, it has shown an error. Where did the actual problem occur? Please give me a relevant solution.

models.py:

class Products(models.Model):

    user = models.ForeignKey(User, related_name="merchandise_product_related_name", on_delete=models.CASCADE, blank=True, null=True)
    
    product_image = models.ImageField(blank=True, null=True, upload_to = "1_products_img")



class ProductOrder(models.Model):

    User = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='UserOrderRelatedName',on_delete=models.CASCADE)
    
    img = models.ImageField(blank=True, null=True)

views.py:

this works well,

def Order(request, quick_view_id):

    OrderProduct = get_object_or_404(Products, pk=quick_view_id)

    if request.method == "POST" and request.user.is_authenticated:

        ProductOrder.objects.create(
            img = OrderProduct.product_image
        )
        return redirect('quick_view', quick_view_id)


def OrderList(request):
    AllOrder = ProductOrder.objects.all()
    context = {
        "AllOrder":AllOrder,
    }
    return render(request, "order_list.html", context)

template:

{% for order in AllOrder %}
<img style="width: 100px;" src="{{order.img.url}}">
{% endfor %}

error:

ValueError at /OrderList/
The 'img' attribute has no file associated with it.
Request Method: GET
Request URL:    http://127.0.0.1:8000/OrderList/
Django Version: 4.0.4
Exception Type: ValueError
Exception Value:    
The 'img' attribute has no file associated with it.
Exception Location: D:\1_WebDevelopment\17_Ecomerce Website\ecomerce site\env\lib\site-packages\django\db\models\fields\files.py, line 40, in _require_file
Python Executable:  D:\1_WebDevelopment\17_Ecomerce Website\ecomerce site\env\Scripts\python.exe
Python Version: 3.9.5
Python Path:    
['D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce site',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\python39.zip',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\DLLs',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\lib',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39',
 'D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce site\\env',
 'D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce '
 'site\\env\\lib\\site-packages']
Server time:    Sat, 30 Jul 2022 13:52:11  0000

CodePudding user response:

If the product_image or img does not have any image, you have to make an if condition that checks for the existence of the image, before rendering it.

For example, in your template:

{% for order in AllOrder %}
{% if order.img %}
    <img style="width: 100px;" src="{{order.img.url}}">
{% else %}
    <img style="width: 100px;" src="<some static image url>">
 {% endif %}
{% endfor %}

CodePudding user response:

settings.py:

MEDIA_URL = '/media/'
MEDIA_ROOT = str(BASE_DIR.joinpath('media'))

urls.py:

from django.conf import settings
from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns  = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

templates:

<img src="/media/image1.jpg" alt="">

CodePudding user response:

The problem may be arising during form submission. Maybe the actual file isn't being POSTed to the server so make sure you have enctype=multipart/form-data in your form where you have method='post'. Then on your view,the form responsible for submitting the data should have something like form = YourForm(request.POST, request.FILES or if you're not using a django form then have the image being picked from the request using product_image = request.FILES.get('field_name')

  • Related