如何在django-tables2 Column中使用用户权限
How to use user permissions in django-tables2 Column
使用 djang-tables2 自定义 table 作为:
tables.py:
import django_tables2 as tables
from django_tables2.utils import A
from .models import Person
class PersonTable(tables.Table):
view_column = tables.LinkColumn('person:pessoas_detail', args=[A('pk')])
class Meta:
model = Person
views.py:
from .models import Person
class ListView(SingleTableView):
model = Person
table_class = PersonTable
我需要检查 view_column 上的 FOO 权限。
因为,view_column 是一个 class 属性,所以我不能将装饰器用作 @permission_required.
也许我可以调用 tables.LinkColumn 以外的东西来测试权限,然后 return 列。但是,为了做到这一点,我需要访问用户对象(可能来自请求对象),此时我无法访问它。
有更简单的方法吗?
基本上,我们的想法是仅在有权限访问时才显示列,否则根本不显示。
我认为更简单的方法是使用模板列(我就是这样做的):
view_column = tables.TemplateColumn("""
{% if has_perm('FOO') %}
<a href='{% url "person:pessoas_detail" record.id %}>{{ record.id }}</a>
{% else %}
{{ record.id }}
{% endif %}
""", orderable=False)
现在,如果用户拥有正确的权限,那么它会显示 link - 如果没有,它只会显示每条记录的 ID。
试试 before_render 函数。
Example::
class Table(tables.Table):
name = tables.Column(orderable=False)
country = tables.Column(orderable=False)
def before_render(self, request):
if request.user.has_perm('foo.delete_bar'):
self.columns.hide('country')
else:
self.columns.show('country')
使用 djang-tables2 自定义 table 作为:
tables.py:
import django_tables2 as tables
from django_tables2.utils import A
from .models import Person
class PersonTable(tables.Table):
view_column = tables.LinkColumn('person:pessoas_detail', args=[A('pk')])
class Meta:
model = Person
views.py:
from .models import Person
class ListView(SingleTableView):
model = Person
table_class = PersonTable
我需要检查 view_column 上的 FOO 权限。 因为,view_column 是一个 class 属性,所以我不能将装饰器用作 @permission_required.
也许我可以调用 tables.LinkColumn 以外的东西来测试权限,然后 return 列。但是,为了做到这一点,我需要访问用户对象(可能来自请求对象),此时我无法访问它。
有更简单的方法吗?
基本上,我们的想法是仅在有权限访问时才显示列,否则根本不显示。
我认为更简单的方法是使用模板列(我就是这样做的):
view_column = tables.TemplateColumn("""
{% if has_perm('FOO') %}
<a href='{% url "person:pessoas_detail" record.id %}>{{ record.id }}</a>
{% else %}
{{ record.id }}
{% endif %}
""", orderable=False)
现在,如果用户拥有正确的权限,那么它会显示 link - 如果没有,它只会显示每条记录的 ID。
试试 before_render 函数。
Example::
class Table(tables.Table):
name = tables.Column(orderable=False)
country = tables.Column(orderable=False)
def before_render(self, request):
if request.user.has_perm('foo.delete_bar'):
self.columns.hide('country')
else:
self.columns.show('country')