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')