我已经开发了一个表,使用django-tables2显示模型的记录。该表的最后一列是一个“编辑按钮”,它引导用户到其行记录的“编辑页”。
我想要的是用户只有在拥有编辑模型的权限的情况下才能看到edit column!
另外,我需要指出的是,目前我正在使用SingleTableView来开发表视图。
发布于 2021-05-20 15:01:04
正如我提到的,我正在使用SingleTableView。因此,我发现在SingleTableView类中有一个方法,根据它的文档:
允许将自定义参数传递给表构造函数。
因此,为了删除edit列,我在视图类中添加了这个方法(它是从SingleTableView继承的)
def get_table_kwargs(self):
if not self.request.user.has_perm('permission_to_edit'):
return {'exclude': ('edit_column',)}
else:
return {}发布于 2021-05-18 19:31:45
1:要生成整个列隐藏的,可以从视图中的表中“排除”字段。
class MyTableView(SingleTableView):
# class based view
model = MyModel
table_class = MyTable
def get_table(self, **kwargs):
table = super(MyTableView, self).get_table(**kwargs)
if not self.request.user.has_perm("can_edit"):
table.exclude = ('edit_button',)
return tabledef my_table_view(request):
# function based view
table = MyTable(<queryset>)
if not request.user.has_perm("can_edit"):
table.exclude = ('edit_button',)
[...]
return render(request, template, context)2:要在列中隐藏按钮,可以在使用自定义呈现函数呈现编辑按钮之前检查权限。
https://django-tables2.readthedocs.io/en/latest/pages/custom-data.html#table-render-foo-methods
class MyTable(tables.Table):
edit_button = tables.Column()
def render_edit_button(self, record):
if request.user.has_perm("can_edit"):
url = reverse("edit_view", args=(record.id,))
return mark_safe(f'<a href="{url}">Edit {record.id}</a>')
return mark_safe("")https://stackoverflow.com/questions/67592589
复制相似问题