2011-11-18 29 views
15

我试图在模型中创建一个字段,应该为注册用户存储图像。 此图像应重命名并存储在单独的用户目录中,如media/users/10/photo.jpegDjango在模型中存储用户图像

我搜查了很多,但仍然找不到如何干净而正确地做到这一点。在我看来,许多网站需要相同的功能,这应该是在Django的文档,但事实并非如此。

+0

你正在为每个用户ID创建一个目录?为什么不'media/users/10.jpeg'?只是问:D –

+0

因为可能有其他用户相关的内容来存储:) – dragoon

+0

哦,我明白了!我觉得我遇到了类似的问题,让我看看我是否可以帮助 –

回答

35

你想使用“upload_to”选项上ImageField

#models.py 
import os 

def get_image_path(instance, filename): 
    return os.path.join('photos', str(instance.id), filename) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    profile_image = ImageField(upload_to=get_image_path, blank=True, null=True) 

这是代码直接从我的一个项目。上传的图像会/MEDIA_ROOT/photos/<user_id>/filename

你想要的东西,只是改变了“照片”串“用户”在def get_image_path

下面是关于它的小点点的文档,下FileField细节

+0

酷,这实际上确实将文件保存到正确的位置,但是当我在模板“{{user.profile_image}}”中使用时,它出于某种原因给出了''/ users/users/40/photo.png''而不是' '/ media/users/40/photo.png'' – dragoon

+1

对不起,我应该使用''{{user.profile_image.url}}'' – dragoon

+3

models.ForeignKey(User,unique = True) 应该是models.OneToOneField (用户) – vinyll

0

您需要制作一个模型,该模型具有用户模型的外键,您可以在该模型中为用户设置image field。我不会推荐修改用户模型本身。

+2

对不起,但问题不在于模型,而是关于如何存储图像。 – dragoon

+1

您可以为任何FileField或Image字段创建动态上载路径。只需在模型中添加一个返回upload_to路径的函数即可。你可以在Django文档中找到一个例子:https://docs.djangoproject.com/en/1.3/ref/models/fields/#filefield – Brandon

+1

不是最好的答案,但不值得投票... – nicorellius

相关问题