2

プロジェクトで django-mptt をセットアップしてみます。チュートリアルからサンプルを取得し、それに応じてモデルを次のように変更しました。

class Genre(MPTTModel):
pk = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, unique=True)
parent = TreeManyToManyField('self', null=True, blank=True, related_name='children')

class MPTTMeta:
    order_insertion_by = ['name']

残念ながら、コンソールは次のようなものを出力します:

/srv/tokedu/local/lib/python2.7/site-packages/Django-1.3.1-py2.7.egg/django/db/models/base.pyc in _set_pk_val(self, value)
    426 
    427     def _set_pk_val(self, value):
--> 428         return setattr(self, self._meta.pk.attname, value)
    429 
    430     pk = property(_get_pk_val, _set_pk_val)
/srv/tokedu/local/lib/python2.7/site-packages/Django-1.3.1-py2.7.egg/django/db/models/base.pyc in _set_pk_val(self, value)
    426 
    427     def _set_pk_val(self, value):
--> 428         return setattr(self, self._meta.pk.attname, value)
    429 
    430     pk = property(_get_pk_val, _set_pk_val)
RuntimeError: maximum recursion depth exceeded

django-mptt は TreeManyToManyField をサポートしていないと思います。誰も同じ問題を抱えていましたか??

4

1 に答える 1

3

ノードは複数の親を持つことはできません。これにより、データ構造が根本的に変わります。これはもはやツリーではなく、任意のグラフです。

django-mptt はツリーのみを処理します。大規模なグラフ データベースがある場合は、まったく異なる問題が発生します。RDBMS ではなく、グラフ データベースの使用を検討することをお勧めします。

私の知る限り、グラフ構造を簡単にするdjangoアプリはありませんが、実際に必要になることはありません:)

便利なリンク:

于 2012-03-23T15:43:02.727 に答える