2016-11-09 5 views
0

私は、以下の簡略化されたモデルがあります:あなたが見ることができるようにパーツで構成されたパーツの総重量のモデリング。

class Part(models.Model): 
    identification = models.CharField(max_length=50) 
    parent_part = models.ForeignKey('Part',blank=True,null=True) 
    weight = models.DecimalField(max_digits=12,decimal_places=3) 

を、パートはツリーを形成し、それ自身の重量がそれぞれ、他の部品で構成することができます。もちろん、トップレベルの部分(ルート)には "parent_part"はありません。

私は現在、すべてのサブパートのすべての重量を合計する方法を実装するのに苦労しています。

これまでの私のアイデアは、これまで避けてはいけないことが分かっている再帰の形になっています。

私の知る限り、適切な解決策はモデルマネージャーによるものだとは思いますが、どうすればよいか分かりません。

提案がありますか?

答えて

1

隣接リスト(親子関係)はツリー構造のモデリングの1つの方法ですが、これは唯一の方法ではなく、例のようなサブツリー集計などの特定のツリー操作では非効率的です。

パフォーマンスがアプリケーションにとって重大で、クエリパターンが読み込み集中型の場合は、nested setなどの代替モデルの使用を検討してください。

おそらく関連する質問、

Database Structure for Tree Data Structure

関連する問題