如何使用外键设置模型链/树

时间:2012-06-18 21:02:24

标签: django django-models foreign-keys dry

我不知道我是否正确地表达了这个问题。如果我应该把它称为其他东西,请随意发表评论。

但这正是我想要完成的,模型的某些层次结构如此:

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. 子页面包含与Page
  2. 相同的所有信息
  3. 指向Page的所有外键和m2m字段也适用于SubPage
  4. 我希望能够快速访问父子页面和根页面,而不会有太多数据库命中
  5. 那么坚持DRY哲学的最佳方法是什么?

    这就是我所拥有的:

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

    我不喜欢这种方式,但有几个原因。 1)SubPage.root是重复的,它就在那里快速找到Page。 2)保存SubPage对象也会保存Page对象,我想将它们分开。

    感谢您的帮助,谢谢

1 个答案:

答案 0 :(得分:3)

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