我试图显示与我的项目相关的用户权限,但不包括某些默认的django用户权限。我正在实现以下代码。我想从我的HTML模板中排除会话,content_type,组之类的权限。我该怎么办?
views.py
permissions = Permission.objects.all()
模板
我要删除的用户可以添加组,用户可以在模板中更改组
{% for permission in permissions %}
{{permission.name}}
{% endfor %}
答案 0 :(得分:1)
如果检查权限对象的字段,则可以找到名为content_type
的字段。 Content_type指定app_label
和model
,从中您可以排除为用户,组,会话等定义的权限。
例如,您可以找到模型的用户,组,会话等的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,并将其排除。
我自己尝试过,尽管这是一个漫长的过程,但我希望其他人对此有更好的解决方案,并且更有效,更快。