1

我正在用 Django 开发一个文件管理器。我正在使用 SFTP 文件服务器和django-storage 包来管理文件。

到目前为止,我开发了一些 API 供用户在他们自己的根目录(对用户来说是抽象的)下创建和修改目录。现在我希望用户能够将他们的文件上传到他们的子目录或在这些子目录之间移动文件,但我不知道怎么做?!

这是我用于文件管理的模型:

def user_directory_path(instance, filename):
    return 'user_{0}/{1}'.format(format(instance.owner.id, '010d'), filename)

class UploadedFile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=150)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    file = models.FileField(upload_to=user_directory_path)

如您所见,当前文件将上传到<server-root>/user_<10digit-userid>/目录。

提前致谢。

4

1 回答 1

1

最后,我在模型中添加了一个额外CharField的名称upload_to,并在函数中使用它user_directory_path来指示文件的子目录。

def user_directory_path(instance, filename):
    if instance.upload_to != '' and instance.upload_to[-1] != '/':
        upload_to = instance.upload_to + '/'
    else:
        upload_to = instance.upload_to
    return 'user_{0}/{1}{2}'.format(format(instance.owner.id, '010d'), upload_to, filename)

class UploadedFile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=150)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    file = models.FileField(upload_to=user_directory_path)
    upload_to = models.CharField(max_length=255, default='')
于 2020-01-03T13:23:06.670 回答