我尝试了一段时间在我的项目中设置django-mptt。我从tutorial中取了一个样本,然后改变了模型,看起来像这样:
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。任何人都有同样的问题??
答案 0 :(得分:3)
节点不能有多个父节点。这从根本上改变了你的数据结构 - 它不再是一棵树,它是一个任意的图形。
django-mptt只处理树木。如果你有一个大的图形数据库,你会遇到一个非常不同的问题。您可能希望使用图形数据库而不是RDBMS。
AFAIK没有django应用程序可以让图形结构变得简单,但是我再也不需要了:)
有用的链接: