我在我的项目中使用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级。
答案 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
,它将包含相对级别。