如何将Django的FileField保存到用户文件夹?

3 投票
3 回答
5446 浏览
提问于 2025-04-15 11:34

我有一个这样的模型


def upload_location(instance, filename):
    return 'validate/%s/builds/%s' % (get_current_user(), filename) 

class MidletPair(models.Model):
    jad_file = models.FileField(upload_to = upload_location)
    jar_file = models.FileField(upload_to = upload_location)
    upload_to=tempfile.gettempdir()

我该如何在upload_location()这个函数里获取当前用户呢?

顺便说一下:查找Django相关的内容有点让人困惑,因为网上有很多1.0之前的资料。

3 个回答

4

首先,不要在网上搜索Django的帮助。只在这里搜索:http://docs.djangoproject.com/en/dev/

其次,当前用户是身份验证的一部分。

http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

用户的信息会记录在请求中。你可以通过 request.user 来访问这个信息。

5

如果你在模型中添加了一个用户字段,并且在上传之前已经设置了这个属性,那么你可以通过实例属性在你的上传位置函数中获取到这个用户。

8

当前用户的信息保存在请求对象里,但在模型方法中你无法直接获取这些信息,除非你从其他地方传递过来,而在upload_to函数里你是做不到这一点的。

所以你需要换个方式来解决这个问题。我建议在表单层面上处理。你可以把请求对象传递到表单的__init__方法中,并把它存储在一个实例属性里,这样你就可以在自定义的上传处理器中访问它。关于上传处理器的详细信息,可以查看这里

撰写回答