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. ページを指すすべての外部キーとm2mフィールドは、サブページにも適用されます
  3. dbヒットが多すぎずに、親サブページとルートページにすばやくアクセスできるようにしたい

では、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-mpttまたはdjango-treebeardを使用します。私は個人的にdjango-mpttを好みますが、どちらもリレーショナル階層をうまく処理する成熟したプロジェクトです。

于 2012-06-18T21:07:45.040 に答える