如何将图像文件加载到 Django File 对象中,然后保存到我的模型的 FileField 中

How to load an image file into a Django File object, then save into a FileField of my model

所以我花了超过 24 小时试图弄清楚如何将图像存储到我的模型中。

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    avatar = models.FileField(null=True, upload_to='www-avatar/')

我的Profile Model有一个属性avatar代表头像。

我想做的是在 User 完成注册过程后,Profile 模型将从我的静态文件夹中分配默认图像。

这是我的 Settings.py 静态

STATIC_ROOT = '/srv/foo/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "bar/resource/"), )

我要加载并存储到模型中的图像在 bar/resource/profile_light.png

到目前为止,我想出的解决方案是这样的

file = File()
url = static("bar/resource/profile_light.png")
file = urllib.request.urlopen(url).read()
r = File(file)
authbox.profile.avatar = File(file)
authbox.profile.save()

无济于事。我是 Django 的新手,非常感谢任何形式的帮助。

编辑:我的问题可能措辞不当,但我需要在创建的配置文件上添加默认图像。我在上面给出的保存头像的片段位于注册过程之后。所以基本上我想在每次有人注册时访问图像,并将图像存储为他们的默认头像。

首先将 models.py 中的字段类型更改为:

avatar = models.ImageField(upload_to='www-avatar/', null=True)

其次,在你的设置文件中你应该定义一个媒体目录

MEDIA_DIR = os.path.join(BASE_DIR, "www-avatar")

那么,您应该将 urls.py 文件修改为

urlpatterns = [
    url(r'^admin/', admin.site.urls),
.......

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

最后但同样重要的是不要忘记安装 pillow 库 pip install Pillow (https://pypi.org/project/Pillow/2.2.1/)

在您的模型中:

avatar = models.ImageField(upload_to='www-avatar', default='path/to/my/default/image.jpg')