我正在尝试建立一个分类某些对象的模型.
我已经尝试使用django-mptt轻松检索相关类别,现在我正在寻找不同的解决方案来找到最好的解决方案.
虽然物化路径,邻接列表和嵌套集之间的主要区别是什么,但我无法找到.维基百科没有给我一个简短的答案,我所知道的只是mptt可能是嵌套集...
用几句话可以向我解释一下吗?
我需要在我的数据库中存储树数据结构,我计划使用django-treebeard或者django-mptt.我的混淆源是每个节点可能是三种不同的可能类型之一:根节点将始终是类型A实体,叶节点是类型C实体,其间的任何东西将是类型B实体.我想知道模拟这种情况的最佳方法.
更新: 我首先尝试了模型继承,我认为这可能是最好的方法.不幸的是,django-treebeard的公共API实际上并不是为处理这个而设计的.我最终得到它与GenericForeignKey一起工作.非常感谢您的回答.
database django database-design django-models django-treebeard
我正在寻找 Django 树库,并尽力避免嵌套集(维护它们是一场噩梦)。
邻接列表模型的缺点始终是无法在不诉诸多个查询的情况下获取后代。Postgres 中的WITH 子句似乎是解决这个问题的可靠方法。
有没有人看过有关WITH与Nested Set的性能报告?我认为嵌套集仍然会更快,但只要它们处于相同的复杂性类别,我就可以承受 2 倍的性能差异。
姜戈-树须让我感兴趣。有谁知道他们在 Postgres 下运行时是否实现了 WITH 子句?
这里有人根据WITH 子句放弃了嵌套集吗?
有两个众所周知的用于创建树结构的Django包:django-treebeard和django-mptt.最近Django CMS开始使用django-treebeard而不是django-mptt.Wagtail CMS也使用django-treebeard.
是什么让django-treebeard成为比django-mptt更优选的选择?
我正在构建一个系统,该系统将显示城市中每个体育场周围的重要设施,如车站、火车站、医院、餐厅和酒吧等,以及它们与各个体育场的距离。我在 Django 中有两个模型,一个用于体育场,另一个用于体育场周围的设施。如果设施有多个选项,设施可以是分层的。例如
球场1:
-医院:
-某医院:700米
-Restaurant:
-中国:
- ABC餐厅:2公里
-意大利:
- LMN餐厅:300米
-某某餐厅:1.2公里
每棵树的根节点名称将与它作为外键链接到的体育场名称相同。每个体育场都有自己的树,指定了它周围的重要设施以及它们与体育场的距离。
我使用 Django-Treebeard 来创建设施树。我的设施模型是 MP_Node 类型。我正在使用管理界面添加我的数据。
当我尝试将体育场与设施树联系起来时,它会显示所有树模型中添加的每个节点。这很乱。想象一下当数据增长时。会很麻烦。
我试图将它链接为 OneToOneField,但没有任何改变。目前,我正在使用外键来链接两个模型。以下是我的实际模型:
######################## models.py ##################################
class NearByFacilities(MP_Node):
name = models.CharField(max_length=65, blank=True, null=True)
distance = models.DecimalField(max_digits=5, decimal_places=2, blank=True,
null=True)
units = (
('km', 'KiloMeters'),
('m', 'meters')
)
unit = models.CharField(max_length=3, choices=units, blank=True,
null=True)
def __str__(self):
if self.name:
return (self.name)
else:
return str(self.distance)
class Stadium(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
name = models.CharField(max_length=65)
capacity = …Run Code Online (Sandbox Code Playgroud) django django-models django-forms django-treebeard django-admin
我正在开发一个网站,需要标记不同类型的内容,这有利于使用django-taggit.但是,如果标签被在其自然的层次结构数据库中表示,这有利于使用Django-MPTT或者Django的树胡,这将是非常有益的.
将taggit的通用标记功能与mptt/treebeard提供的树结构集成的最佳解决方案是什么?
我正在使用与taggit和treebeard一起使用的分层标签.我正在尝试进行数据迁移,因此我可以定义这样的标记,这些标记将出现在应用程序的所有实例中.
我定义了这个方法:
def define_tags(apps, schema_editor):
HierarchicalTag = apps.get_model("aion", "HierarchicalTag")
root = HierarchicalTag.add_root(name='root')
root.save()
leaf = HierarchicalTag.objects.get(pk=root.pk).add_child(name='ook')
leaf.save()
Run Code Online (Sandbox Code Playgroud)
应该创建两个标签"root"和一个子"ook".但是,当我运行迁移时,我收到此错误:
AttributeError: type object 'HierarchicalTag' has no attribute 'add_root'
Run Code Online (Sandbox Code Playgroud)
该方法add_root是MP_Node来自treebeard的类方法.
我怎样才能解决这个问题?
django ×7
django-mptt ×2
database ×1
django-admin ×1
django-forms ×1
django-south ×1
integration ×1
mptt ×1
tagging ×1