如何在django中创建嵌套模型

xvw2m8pv  于 2023-01-14  发布在  Go
关注(0)|答案(1)|浏览(134)

我是django的新手。我的任务是在后台做一个共享文档的功能。文档可以有文件夹,就像谷歌文档一样。我们将在文件夹列表中有文档列表。
我创建了以下模型类:

class Folder(models.Model):
    name = models.CharField(max_length=128, unique=True)

    def __str__(self) -> str:
        return self.name

class File(models.Model):
    folder_name = models.ForeignKey(Folder, on_delete=models.CASCADE)
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')

    def __str__(self) -> str:
        return self.name

首先,创建一个文件夹,然后在该文件夹中上传一个文件。我的问题是:

  • 在google docs中,我们可以在文件夹中添加文件夹,如果我想在文件夹中添加文件夹,然后在上面存储文件,我该如何更新我的模型呢?
  • FileField属性实际上是做什么的?我想把数据存储在postgres数据库中,而不是我的本地存储中。如何处理这个问题?
  • 为此,我应该在模型中添加哪些附加功能?
i5desfxk

i5desfxk1#

要添加对子文件夹的支持,我需要从Folder模型中添加一个可以为空的外键到它自身,请查看ForeignKey的文档,以了解如何引用它自身。
要理解FileField实际上是做什么的,我建议阅读the documentation about File Uploads
关于文件存储,我不确定将文件存储在数据库中是否是个好主意。如果你不想在常规文件系统中存储文件,Django有一个非常灵活的custom storages API。你可能不需要自己实现替代方案。最有可能的是,别人已经做了它,并创建了一个你可以使用的包。eidogg. django-storages,它增加了对一系列流行的云存储的支持。
总的来说:我建议你在探索Django的新领域时,一定要查阅Django文档。在我看来,文档是Django的关键特性之一。写得这么好,去那里总是一件快乐的事:)

相关问题