首页 > 解决方案 > DJANGO - 将本地存储的图像上传到模型 ImageField 属性

问题描述

我将图像下载到文件夹的子根目录images中,我media正在尝试生成包含images文件夹内照片的新模型。这就是我的模型和视图的样子:

class Post(models.Model):
   ...
    image = models.ImageField(upload_to="images", blank=True, null=True)
def generate_posts(request):
    for i in range(20):
        title_ = f'title{i}'
        body_ = f'text for post number : {i}'
        author_ = f'author{i}'
        network_ = randomize_social()
        post = Post(title=title_, body=body_, author=author_, social_network=network_)
        if randomize_picture():
            post.image.save("logo.png", File("images/svante.jpg"), save=True)
        else:
            post.image = None
        post.save()

    areGenerated = True
    return render(request, "posts/generate_posts.html", {'areGenerated':areGenerated})

logo.png文件是在images文件夹内创建的,但它是空白的,大小为 0kb,当我按照/generatepostsurl 操作时,我收到以下错误消息:

AttributeError at /generateposts
'str' object has no attribute 'read'

我能做些什么来解决这个问题?

标签: pythondjangodjango-modelsdjango-views

解决方案


您是否对设置文件进行了更改?您需要进行更改,例如 MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' 并且不要忘记将这些添加到您的网址中:

from . import views, settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns


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

推荐阅读