我正在开发一个层级应用程序,其中叶子节点可以是不同模型的实例。我无法弄清楚如何在django-mptt应用程序中使其工作。这在该应用程序中是否可能?如果是,我做错了什么?如果不是,有没有其他工具可以实现我想做的事情?
以下是模型的基本结构:
当我尝试以下操作时,我只能获取文件夹的子项,而无法获取任何图像。同样的情况也出现在我尝试获取这些图像的祖先时。
这就是在所有操作后,数据存储在数据库中的方式:
以下是模型的基本结构:
class FolderItemBase(MPTTModel):
order = models.PositiveIntegerField()
class Meta:
abstract = True
class MPTTMeta:
parent_attr = 'folder'
order_insertion_by = ['order']
class Folder(FolderItemBase):
folder = TreeForeignKey('Folder', related_name='folders', blank=True, null=True)
...
class Image(FolderItemBase):
folder = TreeForeignKey('Gallery', related_name='images') # cannot be null since leaf has to be inside of a folder
...
当我尝试以下操作时,我只能获取文件夹的子项,而无法获取任何图像。同样的情况也出现在我尝试获取这些图像的祖先时。
>>> folder1 = Folder.objects.create(title='Folder 1', order=0)
>>> folder2 = Folder(title='Folder 2', order=0)
>>> folder2.insert_at(folder1, save=True)
>>> image = Image(...)
>>> image.insert_at(folder1, save=True)
>>> folder1.get_children()
[<Folder: Folder 2>]
>>> image.get_ancestores()
[]
这就是在所有操作后,数据存储在数据库中的方式:
Folder table
----------------
+----+-------+-----+------+---------+-------+-----------+----------+
| ID | order | lft | rght | tree_id | level | folder_id | title |
+----+-------+-----+------+---------+-------+-----------+----------+
| 1 | 0 | 1 | 4 | 1 | 0 | | Folder 1 |
+----+-------+-----+------+---------+-------+-----------+----------+
| 2 | 0 | 2 | 3 | 1 | 1 | 1 | Folder 2 |
+----+-------+-----+------+---------+-------+-----------+----------+
Images Table
------------
+----+-------+-----+------+---------+-------+-----------+
| ID | order | lft | rght | tree_id | level | folder_id |
+----+-------+-----+------+---------+-------+-----------+
| 1 | 1 | 2 | 3 | 1 | 1 | 1 |
+----+-------+-----+------+---------+-------+-----------+
正如您所看到的,它可以确定图片应该是什么级别,并且左右数字也是正确的(至少看起来是),但它不会更新文件夹表格,因此当您尝试查询时,没有任何内容被选中。
非常感谢您提供的任何指针。