0

我不知道我是否正确地表达了这个问题。如果我应该将其称为其他名称,请随时发表评论。

但这是我想要完成的,一些模型的层次结构如下:

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. 子页面包含页面拥有的所有相同信息
  2. 所有指向 Page 的外键和 m2m 字段也适用于 SubPage
  3. 我希望能够快速访问父子页面和根页面而没有太多的数据库命中

那么坚持 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对象,我想将它们分开。

感谢您的帮助,谢谢

4

1 回答 1

3

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

于 2012-06-18T21:07:45.040 回答