当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Django:将用户上传内容保存在单独的文件夹中》经验,为你挑选了1个好方法。

我希望单个用户能够将其文件上传到一个文件夹中(因此每个用户都有自己的根文件夹,他们可以在其中上传自己的文件),但是我不确定实现此目标的最佳方法。

我最初计划将用户电子邮件用作他们的文件夹名称,他们所有的上载都将保存在此文件夹中。但是,据我所知,检索此信息的唯一方法是通过请求函数,而且我无法设法将请求的实例获取到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.

Louis Barran.. 7

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

    这是Django文档中的完整示例,用于访问模型中的实例信息以使用用户ID构建路径:

def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_/
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)

在这种情况下,它将在文件夹名称中使用用户ID。当然,您可以将替换FileFieldImageField

django docs中的更多信息:FileFields.upload_to



1> Louis Barran..:

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

    这是Django文档中的完整示例,用于访问模型中的实例信息以使用用户ID构建路径:

def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_/
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)

在这种情况下,它将在文件夹名称中使用用户ID。当然,您可以将替换FileFieldImageField

django docs中的更多信息:FileFields.upload_to

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有