gpt4 book ai didi

django-mptt - 如何在同一棵树中设置不同的模型

转载 作者:行者123 更新时间:2023-12-04 17:48:44 27 4
gpt4 key购买 nike

我想要一棵树来模仿带有文件夹和文件的文件系统。文件夹和文件将由具有不同字段属性的不同模型定义。

楷模:

from mptt.models import MPTTModel, TreeForeignKey

class Folder(MPTTModel):
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
name = models.CharField(max_length=50)
type = models.CharField(max_length=50)

class File(MPTTModel):
parent= TreeForeignKey(Document)
filename = models.CharField(max_length=255)
encoding = models.CharField(max_length=20)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)

创建一些文件夹和文件:
 from shapefile.models import Folder, File
root = Folder.objects.create(name="Root")
download = Folder.objects.create(name="Download", parent=root)
upload = Folder.objects.create(name="Upload", parent=root)
File.objects.create(filename="Test", encoding="UTF-8", parent=download)

应该有:
> Root
> --Download
> ----Test
> --Upload

如何在 View 和模板中检索这棵树?

编辑:

文件不会作为文件夹的节点插入:
file = File.objects.get(filename="Test")
file.get_ancestors()
>>> []

最佳答案

您可以将 MPTTModel 与 generic relation 结合使用
来自内容类型框架。
您可以通过将 'django.contrib.contenttypes' 添加到您的 INSTALLED_APPS 设置来启用它。

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class TreeItem(MPTTModel):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

class Folder(models.Model):
name = models.CharField(max_length=50)
type = models.CharField(max_length=50)

class File(models.Model):
filename = models.CharField(max_length=255)
encoding = models.CharField(max_length=20)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)

mptt documentacion解释了如何访问模板中的树。

关于django-mptt - 如何在同一棵树中设置不同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com