如何在 django-tables2 列中使用用户权限

rsd*_*rsd 4 python django permissions django-class-based-views django-tables2

使用 djang-tables2 自定义表作为:

表.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
Run Code Online (Sandbox Code Playgroud)

视图.py:

from .models import Person

class ListView(SingleTableView):
    model = Person
    table_class = PersonTable
Run Code Online (Sandbox Code Playgroud)

我需要检查 view_column 上的 FOO 权限。因为 view_column 是一个类属性,我不能使用装饰器作为@permission_required。

可能我可以调用除 tables.LinkColumn 之外的其他内容来测试权限,然后返回该列。但是,为了做到这一点,我需要访问用户对象(可能来自请求对象),此时我无权访问。

有没有更简单的方法来做到这一点?

基本上,这个想法是仅在有权限访问或根本不显示时才显示列。

Ser*_*eim 5

我认为做你想做的更简单的方法是简单地使用模板列(这就是我所做的):

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)
Run Code Online (Sandbox Code Playgroud)

现在,如果用户具有正确的权限,那么它将显示链接 - 如果没有,它将只显示每条记录的 id。