我是Django和MPTT的新手,并且很难弄清楚如何获取所有叶节点并将它们直接发送到Form类。 例如,我创建了MPTT类别模型,并具有以下层次结构:
所以我只想获得叶子类别(cat2,3,5,6)。我的Form类看起来像这样:
class UploadForm(forms.Form):
description = forms.CharField(max_length=50)
category = mpttform.TreeNodeMultipleChoiceField(queryset=Category.objects.all())
file = forms.FileField()
并且使用queryset = Category.objects.all()我得到了完全相同的东西 - 所有类别及其子代。有一种方法我只能得到叶子节点(子),但是来自所有类别的叶子节点,而不是从特定的类别实例?感谢。
答案 0 :(得分:19)
暂时没有使用django mptt,但鉴于可以通过right == left + 1
标识叶节点,您应该能够使用F()
expression
答案 1 :(得分:8)
Category.objects.filter(children__isnull=True)
答案 2 :(得分:2)
不理想的解决方案:
Category.objects.filter(id__in=[category.id for category in Category.objects.all() if category.is_leaf_node()])
答案 3 :(得分:0)
我的django mptt的小片段
来自django.db导入模型
class CategoryManager(models.Manager):
def get_leaf(self, level=2):
return self.filter(level__lte=level).order_by('tree_id','lft').all()
class Category(models.Model):
objects = CategoryManager()
利润,使用它:Catalog.objects.get_leaf()