Использование Đăng-tables2 пользовательскую таблицу:Как использовать права доступа пользователей в Джанго-tables2 Колонка
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
мне нужно проверьте разрешение FOO на view_column. Потому что, view_column - это атрибут класса, я не могу использовать декоратор как @permission_required.
Возможно, я мог бы вызвать что-то другое, кроме tables.LinkColumn, чтобы проверить разрешение и затем вернуть столбец. Однако для этого мне нужно будет получить доступ к объекту пользователя (возможно, из объекта запроса), к которому у меня сейчас не будет доступа.
Есть ли более простой способ для этого?
В принципе идея состоит в том, чтобы показать столбец только в том случае, если есть доступ к нему или вообще не отображается.
У этого 2 недостатка, как я вижу. Столбец не является обязательным. Я знаю, что его не спрашивали, но это то, что вы получаете, если разрешения были проверены перед возвратом объекта Column. Это также кажется большим штрафом за производительность. – rsd
Я начинаю думать, что это может быть единственным решением. Django кэширует код выполнения, поэтому я не знаю, можно ли доверять тому, что следующий запрос будет для одного и того же пользователя. django-tables2 использует метод __new__ для сбора информации о столбцах, которая также дает меньше места для манипуляции с атрибутами класса. – rsd
Как я уже сказал, я использую это решение в подобных случаях. Нет никакого штрафа за производительность, если вы используете разбивку на страницы в таблицу (т. Е. Отображаете менее 100 строк для каждой страницы). Существуют и другие решения, но тогда вам, вероятно, придется манипулировать таблицей в представлении (или определить две таблицы, одна с view_column и одна без нее, и сделать правильный вариант в зависимости от разрешений - не DRY). – Serafeim