python - 拥有一个可以属于其他两个模型中的任何一个的 django 模型(外键关系)

标签 python django database-design

我正在尝试使用 django 模拟文件浏览器应用程序。我的基本模型是用户有​​一个项目,并且该项目有文件和其他也可以有文件的子目录。

这是我的 models.py 文件

class CaseFolder(models.Model):
    name = models.CharField(max_length = 255)

class SubFolders(models.Model):
    name = models.CharField(max_length = 255)
    case = models.ForeignKey(CaseFolder)

class Documents(models.Model):
    file = models.FileField(upload_to=set_upload_path)
    belongs_to = models.ForeignKey(SubFolders)

到目前为止,我正在创建一个“MAIN”文件夹,它基本上是包含其他子目录的根文件夹。主文件夹还可以包含不属于子目录的文件。

如果我可以通过让文档模型引用根文件夹(如果它们不想属于子目录)来消除对“主”文件夹的需求,那就更好了。我看到的唯一方法是下面的。但想知道是否有更好的方法

class Documents(models.Model):
    file = models.FileField(upload_to=set_upload_path)
    belongs_to = models.ForeignKey(SubFolders,Null = True)
    belongs_to_root = models.BooleanField(deafult=False)

最佳答案

忘记SubFolders模型。

您可以在 CaseFolder 模型中使用自引用关系来模拟这些结构,查看:

class CaseFolder(models.Model):
    name = models.CharField()
    parent = models.ForeignKey('self', blank=True, related_name='subfolders')

class Document(models.Model):
    file = models.FileField(upload_to=set_upload_path)
    belongs_to = models.ForeignKey(CaseFolder)

要知道Document是否属于根目录,只需使用document.belongs_to.parent is None即可。

关于python - 拥有一个可以属于其他两个模型中的任何一个的 django 模型(外键关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946454/

相关文章:

python - Python字符串添加优化失败案例

Python tkinter。如何获取菜单的高度

python - uwsgi 破管 - django, nginx

javascript - 在页面加载时加载时间戳并将其与表单提交时的时间戳进行比较

mysql - 具有挑战性的数据建模问题

python - 一个可以忽略目录的 Python walker

python - 使用带有 token 的 Google API [Django & AllAuth]

django - 注释查询集排名字段的正确方法

performance - 设计大规模的关系系统

java - 文档管理系统-数据库设计