在ImageField upload_to路径中获取用户名

Dav*_*542 8 django django-models django-forms

我希望在用户上传图像时在upload_to目录路径中包含用户名.这是我目前拥有的 -

#model
class Avatar(models.Model):
    avatar = models.ImageField(upload_to='images/%s' %(USERNAME) )
     user = models.ForeignKey(UserProfile)

#form
class ProfilePictureForm(ModelForm):
    class Meta:
        model = Avatar
        fields = ('avatar',)
Run Code Online (Sandbox Code Playgroud)

如何让USERNAME模型能够设置upload_to路径?

Ism*_*awi 21

upload_to可以是可调用的而不是字符串,在这种情况下,它将传递当前实例和文件名 - 请参阅文档.这样的事情应该有效(instance.user.user因为instance.userUserProfile,所以instance.user.userUser).

def upload_to(instance, filename):
    return 'images/%s/%s' % (instance.user.user.username, filename)
class Avatar(models.Model):
    avatar = models.ImageField(upload_to=upload_to)
    user = models.ForeignKey(UserProfile)
Run Code Online (Sandbox Code Playgroud)

  • 这是问题的正确答案.但是,我建议用户使用用户ID而不是用户名.您永远不知道何时需要修改用户名,这可能会带来一些令人头疼的问题. (6认同)
  • @JeromeParadis使用id时出现问题,正如文档所说:"在大多数情况下,此对象尚未保存到数据库中,因此如果它使用默认的AutoField,它可能还没有其主要值关键领域." https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to (2认同)
  • 我建议使用os.path.join来创建路径 (2认同)