在django mptt中执行以下操作的错误是什么?

在django mptt中执行以下操作的错误是什么?,django,django-mptt,Django,Django Mptt,我有一个类别树,其中的条目与该类别相关。这是我的模型文件: from django.db import models import mptt class Category(models.Model): nombre=models.CharField(max_length=70) padre=models.ForeignKey('self', blank=True, null=True) def __unicode__(self): return self.nombre clas

我有一个类别树,其中的条目与该类别相关。这是我的模型文件:

from django.db import models
import mptt

class Category(models.Model):
 nombre=models.CharField(max_length=70)
 padre=models.ForeignKey('self', blank=True, null=True)

 def __unicode__(self):
  return self.nombre

 class Meta:
  ordering = ['tree_id', 'lft']

# Create your models here.

class Item(models.Model):
    category=models.ManyToManyField(Category)

try:
 mptt.register(Category, order_insertion_by=['nombre'], parent_attr='padre')
except mptt.AlreadyRegistered:
 pass
我使用ManyToManyField是因为每个项目都可以在多个类别中

现在,在我的应用程序中安装“mptt”之后。我正在shell中尝试以下操作:

Category.tree.add_related_count(Category.tree.root_nodes(), Item,
    'category', 'q_c', cumulative=True)
它将返回一个树,并在每个节点上加载属于某个节点的项目数。这似乎是django mptt的标准功能,如文档中所述

然而,我得到了一个错误。以下是跟踪:


在Ubuntu9.1中使用SVN django mptt和django 1.1。

我最终实现了一个非常类似的查询,用于手动操作的站点。代码如下:

tree = Table1.objects.extra(select={"tree_content_count":
 """SELECT COUNT(DISTINCT %(join_table_fk1_name)s)
      FROM %(join_table)s
      WHERE %(join_table_fk2_name)s in
      (
        SELECT id FROM %(data_table)s m2 where m2.tree_id = %(data_table)s.tree_id
          and m2.lft between %(data_table)s.lft and %(data_table)s.rght
      )""" % {params_dict_here}
 })
这似乎奏效了。这是一个完整的层次结构计数;换句话说,在child1中放入五件物品,在child2中放入八件物品,在parent中放入一件物品将给出以下计数:

parent (14) +-- child1 (5) +-- child2 (8)
如果您想要一个只包含特定级别的内容,而不包含层次结构中位于该级别之下的内容的计数,那么您必须修改in most select语句。

我最终为手动处理的站点实现了一个非常类似的查询。代码如下:

tree = Table1.objects.extra(select={"tree_content_count":
 """SELECT COUNT(DISTINCT %(join_table_fk1_name)s)
      FROM %(join_table)s
      WHERE %(join_table_fk2_name)s in
      (
        SELECT id FROM %(data_table)s m2 where m2.tree_id = %(data_table)s.tree_id
          and m2.lft between %(data_table)s.lft and %(data_table)s.rght
      )""" % {params_dict_here}
 })
这似乎奏效了。这是一个完整的层次结构计数;换句话说,在child1中放入五件物品,在child2中放入八件物品,在parent中放入一件物品将给出以下计数:

parent (14) +-- child1 (5) +-- child2 (8) 如果您想要的计数只包括特定级别的内容,而不包括层次结构中位于该级别之下的内容,则必须修改in most select语句。

尝试使用:

Category.tree.add_related_count(Category.objects.all(), Item, 'category', 'q_c', cumulative=True)
尝试使用:

Category.tree.add_related_count(Category.objects.all(), Item, 'category', 'q_c', cumulative=True)

你的例子跟在文档后面,但是在文档中,它们的类别是一个外键而不是很多。是的,我注意到。。。我将此作为一个问题发布,以查看我是否从创建者那里得到任何答案。我刚刚尝试使用ForeignKey,它可以工作,因为表是空的,它返回[]。也许我所要求的还没有实现?你的例子跟在文档后面,但是在文档中,它们的类别是一个外键而不是很多。是的,我注意到。。。我将此作为一个问题发布,以查看我是否从创建者那里得到任何答案。我刚刚尝试使用ForeignKey,它可以工作,因为表是空的,它返回[]。也许我所要求的还没有实现?你能分享一下你是如何实现的吗?你能展示一个你的模型,视图和模板的例子吗。我也在尝试做同样的事情,看看我的问题>你能分享一下你是如何实现的吗?你能展示一个你的模型,视图和模板的例子吗。我也在尝试做同样的事情,请看我的问题>介意解释一下原因吗?这将帮助每个人更好地理解你的答案。介意解释一下原因吗?这将帮助每个人更好地理解你的答案。