如何在Django HTML模板中排除某些特定的Django权限

时间:2019-06-19 10:14:25

标签: django user-permissions

我试图显示与我的项目相关的用户权限,但不包括某些默认的django用户权限。我正在实现以下代码。我想从我的HTML模板中排除会话,content_type,组之类的权限。我该怎么办?

  

views.py

permissions = Permission.objects.all() 
  

模板

我要删除的用户可以添加组,用户可以在模板中更改组

{% for permission in permissions %}
{{permission.name}}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

如果检查权限对象的字段,则可以找到名为content_type的字段。 Content_type指定app_labelmodel,从中您可以排除为用户,组,会话等定义的权限。

例如,您可以找到模型的用户,组,会话等的content_type ID:

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission
content_type_ids = []  # a list to store the ids of the content_type object which you want to exclude

# for user model
content_type_ids.append(ContentType.objects.get(model='user').id)
# for session model
content_type_ids.append(ContentType.objects.get(model='session').id)
# for group model
content_type_ids.append(ContentType.objects.get(model='group').id)

# exclude the Permissions having content_type_id obtained
permissions = Permission.objects.exclude(content_type_id__in=content_type_ids)

通过这种方式,您可以获取不想在模板中显示的每个模型的内容类型ID,并将其排除。

我自己尝试过,尽管这是一个漫长的过程,但我希望其他人对此有更好的解决方案,并且更有效,更快。