【问题标题】:How to create separate folder for each user in django and let user upload file in that folder?如何在 django 中为每个用户创建单独的文件夹并让用户在该文件夹中上传文件?
【发布时间】:2015-06-06 06:20:52
【问题描述】:

我想让每个用户上传一个文本文件,这样他就只能看到他上传的文件。我还希望他上传的文件存储在他自己的文件夹中,例如 home/ubuntu/documents/username/

我的 models.py 看起来像这样 -

from django.db import models
from django.contrib.auth.models import User
import os

class UserProfile(models.Model):

user = models.OneToOneField(User)

    def __unicode__(self):
        return self.user.username


def get_upload_path(instance, filename):
    return os.path.join('documents', instance.owner.username, filename)

class Document(models.Model):
    docfile = models.FileField(upload_to=get_upload_path)

【问题讨论】:

  • 是的,但有什么问题?什么不工作?
  • 为什么要将文件存储在home/ubuntu/documents 中?你项目的media 文件夹有什么问题?
  • @xyres 好的,即使您可以告诉我如何在媒体文件夹中执行此操作也会有所帮助,好吗?

标签: django python-2.7


【解决方案1】:

编辑

对上次的失礼感到抱歉。

def get_upload_path(instance, filename):
    return 'documents/{0}/{1}'.format(instance.user.username, filename)

class Document(models.Model):
    user = models.ForeignKey(User, null=True)
    docfile = models.FileField(upload_to=get_upload_path)

另外,see documentation 是另一个例子。


注意事项

  1. 请在设置文件中配置MEDIA_ROOT 路径。这是存储文件的位置。
  2. 当用户更改用户名时,不要忘记编写另一个方法来更改用户文件夹的名称。
  3. 上面第 2 点的替代方案将使用 pk 代替用户名。但这取决于你。

【讨论】:

  • 嘿@xyres,当我运行此代码时,出现以下错误 - NameError: name 'get_upload_path' is not defined
  • @VipulVaibhaw 抱歉,弄错了。现在修好了。
  • 它现在说您正在尝试将不可为空的字段“所有者”添加到没有默认值的文档中。对不起,我是 django 新手,所以遇到了很多问题。
  • @VipulVaibhaw 您的Document 模型是否有user 字段,或任何其他ForeignKey 链接到User 模型?如果不清楚,只需在您的问题中发布您的整个Document 模型。我会弄清楚的。
  • 我在这里发布了整个models.py文件,文档模型中没有用户。
猜你喜欢
  • 2014-06-29
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2019-03-16
  • 2023-02-01
  • 2010-09-06
相关资源
最近更新 更多