首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件列显示,django-tables2 2

条件列显示,django-tables2 2
EN

Stack Overflow用户
提问于 2021-05-18 19:10:46
回答 2查看 717关注 0票数 1

我已经开发了一个表,使用django-tables2显示模型的记录。该表的最后一列是一个“编辑按钮”,它引导用户到其行记录的“编辑页”。

我想要的是用户只有在拥有编辑模型的权限的情况下才能看到edit column

另外,我需要指出的是,目前我正在使用SingleTableView来开发表视图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-20 15:01:04

正如我提到的,我正在使用SingleTableView。因此,我发现在SingleTableView类中有一个方法,根据它的文档:

允许将自定义参数传递给表构造函数。

因此,为了删除edit列,我在视图类中添加了这个方法(它是从SingleTableView继承的)

代码语言:javascript
复制
    def get_table_kwargs(self):
            if not self.request.user.has_perm('permission_to_edit'):
                return {'exclude': ('edit_column',)}
            else:
                return {}
票数 0
EN

Stack Overflow用户

发布于 2021-05-18 19:31:45

1:要生成整个列隐藏的,可以从视图中的表中“排除”字段。

代码语言:javascript
复制
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 table

代码语言:javascript
复制
def 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

代码语言:javascript
复制
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("")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67592589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档