python - Django:将用户上传保存在单独的文件夹中

标签 python django upload models

我希望个人用户能够将他们的文件上传到一个文件夹中(这样每个用户都有自己的根文件夹,他们可以在其中上传自己的文件),但我不确定实现的最佳方式这个。

我本来打算用用户的邮箱作为他们的文件夹名,他们所有上传的都保存在这个文件夹里。但是,从我收集到的信息来看,检索此信息的唯一方法是通过请求函数,我无法设法将请求实例放入 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.

最佳答案

  1. 我不建议您使用用户电子邮件或任何其他可以更新的信息作为文件夹名称,因为每次他更改电子邮件或用户名时您都不会更改文件夹名称。因此,请使用唯一且不可更改的用户 ID。

  2. 这是 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/

相关文章:

python - 从元素/节点中提取 HTML

python - 如何获取在场景中创建的根父级列表 - Autodesk Maya/Python?

python - Django - post_init 信号在模型实例保存和创建实例之前被调用。为什么?

css - 多个文件上传上的样式 css 按钮

python - 为什么 DictWriter 在我的代码中不起作用?

python - 软件设计与开发专业 : Pygame Smudge Trails

python - Django 文件位置

python - django 模板 - 循环遍历 2 个查询集

powershell - 使用PsFtp将文件上传到FTP Powershell

Javascript 从按钮上传信息