Django和MPTT - 只获取叶节点

Zed*_*Zed 12 django django-mptt

我是Django和MPTT的新手,并且很难弄清楚如何获取所有叶子节点并将它们直接发送到Form类.例如,我创建了MPTT类别模型,并具有以下层次结构:

  • 组别
    • 产品组别
    • 类别3
  • 分类四
    • 类别5
    • 类别6

所以我只想获得叶子类别(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() 
Run Code Online (Sandbox Code Playgroud)

并且使用queryset = Category.objects.all()我得到完全相同的东西 - 所有类别及其子节点.有一种方法我只能得到叶节点(子节点),但所有类别的叶子节点,而不是特定的类别实例?谢谢.

sec*_*ond 19

暂时不使用django mptt,但鉴于可以通过标识叶子节点right == left + 1,您应该能够使用表达式对此进行过滤F()

  • 谢谢!解决方案是Category.objects.filter(lft = F('rght') - 1) (8认同)
  • Zed,Zou应点击接受按钮获取此答案! (3认同)

Arp*_*ngh 10

Category.objects.filter(children__isnull=True)
Run Code Online (Sandbox Code Playgroud)