如何在django-mptt中了解每个孩子相对于主要父母的水平?

时间:2018-06-08 20:06:57

标签: python django django-mptt

我在我的项目中使用django-mptt应用程序。让我试着解释一下这个问题。

views.py:

user_profile = Profile.objects.get(user=self.request.user)
referrals = user_profile.get_descendants().filter(level__lte=profile.level + 3)

在下一个代码的帮助下,我显示了当前用户的后代(只有3个级别),并希望知道每个孩子相对于父级的级别。事实上,在数据库中,用户可以拥有级别超过3的孩子。

在模板中,用户A具有3级

的下一棵树
user A
 user B (level 1)
  user C (level 2)
    user D (level 3)

事实上,在dababase中,用户A看到的树超过3级。就我而言,它是5。

user A
 user B (level 1)
  user C (level 2)
    user D (level 3)
      user E (level 4)
        user F (level 5)

现在,当用户D在模板中打开他的页面时,他会看到自己的后代:

user D
 user E
  user F

我想知道相对于用户D的用户E和F的级别。如何制作?

我尝试了 views.py

for referral in referrals:
   print(referral.level)

此代码返回用户E的4级和用户F的5级。

1 个答案:

答案 0 :(得分:0)

相对级别,是referral 减去级别"当前" userprofile。因此,我们可以使用referral.level - userprofile.level

如果你想用relative_level 注释所有这些对象,我们可以使用Django的ORM:

from django.db.models import F

(user_profile.get_descendants()
             .filter(level__lte=profile.level + 3)
             .annotate(relative_level=F('level') - profile.level))

那么所有后代都将有一个额外的属性.relative_level,它将包含相对级别。