3

私はこのモデルを持っています:

class Category(models.Model):
    name = models.CharField()
    description = models.CharField(blank=True)
    parent = models.ForeignKey('self', blank=True, null=True)

Djangoに、階層に関してカテゴリを並べ替えてもらいたいのですが、次に例を示します。

  • 親1
    • 子供1
  • 親2
    • 子供1

調査を行ったところ、treebeard.al_treeとDjango MPTTの2つのアプリが強力であるため、パフォーマンスが低下したり、保守が困難になったりする可能性があります。

ウェブサイトのサイドバーと管理ページ内(投稿モデルにForeignKeyを含む)にカテゴリを表示します。カテゴリへの追加/変更/削除は非常に少なく、ほとんどの場合、パフォーマンスに大きな影響を与えない読み取り専用です。

これを提供し、上記のものよりも簡単な他のアプリはありますか?追加のアプリなしで、マネージャーなどを使用してDjangoを使用してこれを達成できますか?

4

3 に答える 3

4

django-mpttのようなアプリを使用することで不利な点は見当たりません。実際、それによって提供されるメソッドは、階層構造でクエリを実行するときに最大のパフォーマンスを提供するように最適化されています。保守性や性能を気にする必要はなく、とても使いやすいです!

于 2010-12-02T11:17:30.713 に答える
4

MPTTまたは木の髭はパフォーマンスの低下につながる可能性がありますか?ナンセンス。これらのアプリの要点は、パフォーマンスを大幅に向上させる高度に最適化されたアルゴリズムを提供することです。MPTTを使用すると、単一のデータベース操作でツリー全体またはツリーのサブセクションを取得できます。そうしないと、多くの個別の呼び出しが必要になります。

于 2010-12-02T11:19:50.343 に答える
2

MPTTを使用すると、システムを実行できます。自分で実装すると、ノードを手動で接続したり(〜30行の関数)、すべてのサブレベルに対して個別のクエリを実行したりする可能性があります。たくさんの手作業があり、それを行いました。

MPTTアルゴリズムを使用すると、1つのクエリでサブツリーをフェッチできます。これは、階層データを格納するための一般的なアルゴリズムです。

Django MPTT(特にv0.4)には、管理者とテンプレートでこのすべてのデータを適切に表示するための優れたAPIがいくつかあります。車輪の再発明をする必要はありません。

于 2010-12-02T11:21:48.970 に答える