Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何使用外键建立模型链/树_Django_Django Models_Foreign Keys_Dry - Fatal编程技术网

Django 如何使用外键建立模型链/树

Django 如何使用外键建立模型链/树,django,django-models,foreign-keys,dry,Django,Django Models,Foreign Keys,Dry,我不知道这个问题的措辞是否正确。如果我应该叫它别的名字,请随意评论 但这正是我试图实现的,一些模型的层次结构如下: Page <--- SubPage.1 <--- SubPage.1.1 <--- SubPage.1.1.1 ... |__________| ^ ...and so on | |-- SubPage.1.1.2 ..

我不知道这个问题的措辞是否正确。如果我应该叫它别的名字,请随意评论

但这正是我试图实现的,一些模型的层次结构如下:

Page <--- SubPage.1 <--- SubPage.1.1 <--- SubPage.1.1.1 ...
  |__________|                 ^                           ...and so on
  |                            |-- SubPage.1.1.2 ...
  |                            
 tags #m2m or some other object
      #with foreign key relation 
我不喜欢这种方式,但有几个原因。1) SubPage.root是重复的,它只是在那里快速查找
页面
。2) 保存
子页面
对象也会保存
页面
对象,我想将它们分开


非常感谢您的帮助,谢谢您使用或。我个人更喜欢django mptt,但它们都是能够很好地处理关系层次结构的成熟项目

使用或。我个人更喜欢django mptt,但它们都是能够很好地处理关系层次结构的成熟项目

+1至django mptt。它很简洁,并且很好地解释了它如何管理层次结构的幕后方面。另外,与您的解决方案相比,它允许您在一条SQL语句中简单地查询“子页面.1下的所有页面”或“子页面.1.1.2的所有祖先”,而不必执行多个请求(回想一下,SQL不会为您处理递归)。太棒了,正是我想要的。grazie+1至django mptt。它很简洁,并且很好地解释了它如何管理层次结构的幕后方面。另外,与您的解决方案相比,它允许您在一条SQL语句中简单地查询“子页面.1下的所有页面”或“子页面.1.1.2的所有祖先”,而不必执行多个请求(回想一下,SQL不会为您处理递归)。太棒了,正是我想要的。放牧
class Page(models.Model):
    ....

class SubPage(Page):
    parent = models.ForeignKey('self', related_name = 'subpage_set', blank = 'True')
    root = models.ForeignKey(Page, related_name = 'rootpage_set')