В чем моя ошибка в выполнении следующих действий в django-mptt? - PullRequest
1 голос
/ 04 февраля 2010

У меня есть дерево категорий, с записями Предметов, связанных с категорией. Итак, это мой файл модели:

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» в моих приложениях. Я пытаюсь в оболочке следующее:

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

Который должен возвращать дерево и загружать количество Предметов, принадлежащих узлу на каждом узле. Это похоже на стандартную функциональность django-mptt, как указано в документации.

Однако я получаю ошибку. Ниже приводится след:

http://pastebin.com/m69ed1937

Использование SVN django-mptt и django 1.1 в Ubuntu 9.1.

Ответы [ 2 ]

1 голос
/ 09 сентября 2012

Я реализовал очень похожий запрос для сайта, над которым я работаю вручную.Вот код:

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», то получится следующее число:конкретный уровень (а не вещи, которые находятся ниже его в иерархии), вам придется изменить самый выбранный оператор выбора.

0 голосов
/ 06 июня 2013

Попробуйте использовать:

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