首页 > 解决方案 > 尝试在 Django 中上传图像时没有这样的文件或目录

问题描述

我在 Profile 模型上有一个 ImageField,因此用户可以上传图像。但是,当我尝试上传图片时,出现此错误:FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\name\\Documents\\Projects\\project\\media\\image.png'. 当我查看数据库时,profile_image 字段被填充为“image.png”,但该文件没有出现在项目的任何文件夹中。

设置.py

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

DEBUG_PROPAGATE_EXCEPTIONS = True

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'

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

网址.py

urlpatterns = [
    ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

模型.py

def validate_image(image):
    file_size = image.file.size
    limit_kb = 1000
    if file_size > limit_kb * 1024:
        raise ValidationError("Max size of file is %s KB" % limit_kb)

class Profile(models.Model):
    ...
    profile_image = models.ImageField(upload_to='profile_images/', blank=True, null=True, validators=[validate_image])

视图.py

 profile_form = ProfileForm(request.POST, request.FILES, instance=profile)
            updatedProfile = profile_form.save(commit=False)
            updatedProfile.save()
            currentuser.email = request.POST['email']
            currentuser.save()
            messages.success(request, 'Profile successfully updated!')
            return redirect('viewprofile', slug=profile)

表格.py

class ProfileForm(ModelForm):
    class Meta:
        model = Profile
        fields = ['profile_image', ...]

模板

<label for="profile_image">Profile Image (size cannot exceed 1 MB)</label></p>
                          <input id="profile_image" type="file" class="" name="profile_image">

标签: pythondjango

解决方案


利用<form enctype='multipart/form-data' action='action-url' >


推荐阅读