You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目图片上传报错Wrong name format问题求助

Alright, let's fix that image upload error you're facing. The "Wrong name format" message is telling us two main things: your file path structure doesn't match what your project expects, and there are some mix-ups in your Django settings. Let's go through each fix one by one:

1. Fix Your Static/Media Settings First

Looking at your settings.py, you've mixed up STATIC_ROOT and MEDIA_ROOT — that's a common mistake, but it's throwing off your file storage:

  • STATIC_ROOT is for the collectstatic command to gather all static files (CSS, JS, etc.) for production, not media uploads.
  • MEDIA_ROOT is where Django stores uploaded files like your driver photos.

Update your settings to this:

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')  # This is for collectstatic only
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # Uploads will go here now

2. Match the Required File Path Format

The error message says your path should follow <app>.<model>/<content_field>/<mimetype_field>/<filename_field>/<filename>. From your view's reverse_lazy('mantenimiento:ListaConductores'), I can tell your app is named mantenimiento, and your model is Conductor.

You need to adjust the upload_to parameter in your ImageField to fit this structure. Here are two ways to do it:

Option 1: Static Path

class Conductor(models.Model):
    ci = models.CharField(max_length=30, null=False)
    nombre_apellido = models.CharField(max_length=50,null=False)
    # Follow the required format: app.model/content_field/mimetype_field/filename_field/
    imagen = models.ImageField(upload_to='mantenimiento.conductor/imagen/imagen/imagen/')

Option 2: Dynamic Path (More Flexible)

Use a function to generate the path automatically, which is better if you want to add logic later (like using the driver's ID in the path):

def conductor_image_path(instance, filename):
    # Generate path matching the required format
    return f'mantenimiento.conductor/imagen/imagen/imagen/{filename}'

class Conductor(models.Model):
    ci = models.CharField(max_length=30, null=False)
    nombre_apellido = models.CharField(max_length=50,null=False)
    imagen = models.ImageField(upload_to=conductor_image_path)

The repeated imagen parts correspond to the <content_field>/<mimetype_field>/<filename_field> in the error — adjust those if your project has specific names for those fields.

3. Add Media URL Routing

Make sure your project's main urls.py serves media files in development (production will use your web server like Nginx/Apache for this):

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

urlpatterns = [
    # Your existing URLs go here
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. Double-Check Your Form/View Code

Your form and view look mostly correct, but just confirm:

  • Your HTML form has enctype="multipart/form-data" (you already have this, great!)
  • Your view passes request.FILES to the form (you're doing CrearConductorForm(request.POST, request.FILES) — that's right)

5. Clean Up and Test

Delete the old uploads directory (since we changed MEDIA_ROOT to media), restart your Django server, and try uploading a photo again.

If you still get the error, check if your project uses a custom file storage backend (look for DEFAULT_FILE_STORAGE in settings) — some third-party storage backends enforce specific path structures, and you'll need to adjust upload_to to match their docs.


内容的提问来源于stack exchange,提问作者José Cardozo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:44:06