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

时间:2009-05-13 14:16:48

标签: python django django-models upload

我有一个这样的模型


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 个答案:

答案 0 :(得分:8)

当前用户存储在请求对象中,除非您从其他地方传入,否则无法在模型方法中获取 - 在upload_to函数中无法执行此操作。

所以你需要以不同的方式解决这个问题 - 我建议你在表单层面做这件事。您可以将请求对象传递到表单的__init__方法,并将其存储在实例属性中,您可以在自定义上载处理程序中访问它。有关上传处理程序的文档,请查看here

答案 1 :(得分:5)

如果您在模型中添加了一个用户字段,并在执行上传之前设置了该属性,那么您可以通过实例属性让用户进入您的upload_location函数。

答案 2 :(得分:4)

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

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

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

用户被记录在请求中。 request.user