如何将Django的FileField保存到用户文件夹?
我有一个这样的模型
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__
方法中,并把它存储在一个实例属性里,这样你就可以在自定义的上传处理器中访问它。关于上传处理器的详细信息,可以查看这里。