gpt4 book ai didi

Django-mptt 和多个 parent ?

转载 作者:行者123 更新时间:2023-12-04 03:40:36 32 4
gpt4 key购买 nike

几个星期以来,我一直在用头撞在 table 上解决这个问题,所以我认为可能是时候寻求一些帮助了。
我正在尝试实现一个数据库结构,它具有组件零件的分层数据。我的主要问题在于尝试将一个“子程序集”分配给另一个“程序集”/树。引用下面的示例树 - 我在创建和使用程序集 1 和 2 时没有问题。但是当我制作程序集 3 时,当我调用子程序集时,我得到多个对象返回的错误(我根据我的方式理解)尝试)。

assembly 1:    assembly 2:     assembly 3:
1.1 2.1 2.1
- 1.1.1 - 2.1.1 - 2.1.1
1.2 2.2 1.2
- 1.2.1 - 2.2.1 - 1.2.1

这是我一直在尝试的模型:
#models.py snippet
class Part(models.Model):
part_name = models.CharField(max_length=30, primary_key=True)
description = models.TextField(max_length=500, blank=True, null=True)
revision = models.CharField(max_length=10, blank=True, null=True)

def __unicode__(self):
return u'%s' % (self.part_name)

class Assembly(MPTTModel):
name = models.ForeignKey(Part)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

def __unicode__(self):
return u'%s' % (self.name)

#views.py snippet
def assembly_details(request, assembly_name):
context_instance=RequestContext(request)
assembly = Assembly.objects.get(name=assembly_name)
descendants_list = assembly.get_descendants(include_self=False)
return render_to_response('assembly_details.html', locals(), context_instance,)

所以基本上我正在创建非常基本的树并通过 Part FK 链接到更详细的数据。我需要能够查询任何程序集并查看它的后代 - 所以虽然我可以调用程序集 3,但我不能调用任何已经在多个树中的子项。
对于我正在做的事情,从树中的任何给定点开始,向下总是相同的,即 1.2 将始终具有 1.2.1 的子代,但向上可以改变,即 1.2 可以具有 1 和/的父代或 3。
问题是将 Assembly.parent 设为 ForeignKey,因为它将其限制为一个值。关于某些解决方案或尝试的任何想法?
如果您想查看其他代码或提出问题,请告诉我。这似乎是一个很难解释清楚的话题!谢谢

----编辑----
我发现我需要一个有向无环图 (DAG) 模型。
我还没有具体的解决方案,但是当我弄清楚或提出 DAG 问题时,我会尝试在此处发布链接。

----编辑 2----

django-treebeard-dag
django-dag
我发现了这两个非常小的项目。我最初使用“treebeard”版本,然后为我的项目切换到 django-dag。有关于基本用法的问题,请随时PM,我会看看是否可以提供帮助。

最佳答案

我认为 Django-mptt 是这个特定工作的错误工具。它处理树,在数据结构中作为树的一部分是节点有一个父节点,或者节点是树的根。

树是 Graphs 的广义形式.我知道没有 Django 应用程序可以帮助您处理这些问题。

您可能不得不求助于维护自己的多对多关系并放弃 Django-mptt 的便利。

关于Django-mptt 和多个 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795742/

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