我希望个人用户能够将他们的文件上传到一个文件夹中(这样每个用户都有自己的根文件夹,他们可以在其中上传自己的文件),但我不确定实现的最佳方式这个。
我本来打算用用户的邮箱作为他们的文件夹名,他们所有上传的都保存在这个文件夹里。但是,从我收集到的信息来看,检索此信息的唯一方法是通过请求函数,我无法设法将请求实例放入 models.py 文件中,因此无法将其添加到我的“upload_to”目录中。
如有任何其他关于如何分离用户文件或如何在模型文件中获取请求实例的想法,我们将不胜感激!
这是我当前的模型:
def user_directory_path(instance, filename):
return 'user_{0}/{1}'.format(instance.user.id, filename)
class UploadModel(models.Model):
user = models.OneToOneField(User)
file = models.FileField(upload_to=user_directory_path)
它的相关错误:
Exception Value: UploadModel has no user.
最佳答案
我不建议您使用用户电子邮件或任何其他可以更新的信息作为文件夹名称,因为每次他更改电子邮件或用户名时您都不会更改文件夹名称。因此,请使用唯一且不可更改的用户 ID。
这是 Django 文档中的一个完整示例,用于访问模型中的实例信息以使用用户 ID 构建路径:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
在这种情况下,它使用文件夹名称中的用户 ID。当然,您可以将 FileField
替换为 ImageField
。
django 文档中的更多信息:FileFields.upload_to
关于python - Django:将用户上传保存在单独的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239877/