我正在尝试使用 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/