Django上传图像并放在每个用户的目录中

时间:2017-01-20 02:28:02

标签: django

我希望为每个用户创建一个新目录。该模型的代码如下所示,应该看起来像这样。如何访问注册期间创建的当前用户名?我放了一个占位符函数getcurrentusername(),它应该返回一个字符串,这样为图像创建的目录就是username / profile_images /

class UserProfile(models.Model):

    user = models.OneToOneField(User)

    website = models.URLField(blank=True)
    picture = models.ImageField(upload_to=getcurrentusername()+'\profile_images', blank=True)

    def __unicode__(self):
        return self.user.username

在forms.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('picture',)

在views.py

profile_form = UserProfileForm(data=request.POST)
...
profile = profile_form.save(commit=False)
profile.user = user
    ...
    if 'picture' in request.FILES:
        profile.picture = request.FILES['picture']

    profile.save()

1 个答案:

答案 0 :(得分:0)

upload_to的方法有2个参数:instance和filename。因此,您可以从实例中获取用户名,例如:

def getcurrentusername(instance, filename):
    return "/dir/dir/{0}/{1}".format(instance.user.username, filename)

class UserProfile(models.Model):
...
    picture = models.ImageField(upload_to=getcurrentusername)

当Django保存你的图片时,它会调用getcurrentusername并传递它所需的参数。