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。

AFAIK 没有 django 应用程序可以使图形结构变得简单,但是我又从来没有真正需要:)

有用的链接:

于 2012-03-23T15:43:02.727 回答