我希望单个用户能够将其文件上传到一个文件夹中(因此每个用户都有自己的根文件夹,他们可以在其中上传自己的文件),但是我不确定实现此目标的最佳方法。
我最初计划将用户电子邮件用作他们的文件夹名称,他们所有的上载都将保存在此文件夹中。但是,据我所知,检索此信息的唯一方法是通过请求函数,而且我无法设法将请求的实例获取到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。当然,您可以将替换FileField
为ImageField
。
django docs中的更多信息:FileFields.upload_to
我不建议您使用用户电子邮件或任何其他可以更新为文件夹名称的信息,因为您每次更改电子邮件或用户名时都不会更改文件夹名称。因此,请使用唯一且不可更改的用户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。当然,您可以将替换FileField
为ImageField
。
django docs中的更多信息:FileFields.upload_to