【问题标题】:Django_tables2: Dynamically hiding columns based on the requestDjango_tables2:根据请求动态隐藏列
【发布时间】:2013-11-17 16:30:51
【问题描述】:

我有一个基于具有多个字段的模型的表。我还有两个TemplateColumns,一个用于编辑特定实体,另一个用于删除它。这是我的代码:

class EntitetTable(tables.Table):
    edit = tables.TemplateColumn(template_name='azuriranje/izmena.html',
                            orderable=False, visible=False)
    delete = tables.TemplateColumn(template_name='azuriranje/brisanje.html',
                            orderable=False, visible=False)

    class Meta:
        abstract = True
        attrs = {'class': 'paleblue', }

class TipPredmetaTable(EntitetTable):
    class Meta(EntitetTable.Meta):
        model = models.TipPredmeta

现在,我的系统中有一个用户层次结构,只有作为簿记员的用户才能编辑和删除数据。话虽如此,我试图在我的视图中实现检查以隐藏两个TemplateColumns:

@login_required
def tippredmeta(request):
    try:
        korisnik = request.user.radnik
    except ObjectDoesNotExist:
        return HttpResponseRedirect("/main/")
    queryset = TipPredmeta.objects.all()
    table = TipPredmetaTable(queryset)
    if korisnik.is_kustos:
        table.edit.visible = True
        table.delete.visible = True
    RequestConfig(request).configure(table)
    return render_to_response('azuriranje/tabelaPrikaz.html', {'table': table, },
                              context_instance=RequestContext(request))

但是,table.edit.visible = True 行出现以下异常:

Exception Type:  AttributeError
Exception Value: 'TipPredmetaTable' object has no attribute 'edit'

现在,这是我尝试过的事情: - 首先我考虑使用字段和排除,但我无法动态改变它。 - 然后我考虑将所有这些放入__init__ 方法中,有效地编辑和删除我的EntitetTabel 的属性(这个想法是为了解决错误)但是当错误消失时,我的TemplateColumns 也是如此。我尝试通过字段显示它们,但这没有帮助。我的猜测是超类,tables.Table,不是那样工作的。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以使用tables.Tableexclude 属性来排除不需要的字段。创建表实例后它也可以工作。所以在你的情况下,你可以做这样的事情。

    首先让您的列可见(我删除了visible=False):

    class EntitetTable(tables.Table):
        edit = tables.TemplateColumn(template_name='azuriranje/izmena.html',
                                     orderable=False)
        delete = tables.TemplateColumn(template_name='azuriranje/brisanje.html',
                                     orderable=False)
    

    然后根据您的情况,您可以排除编辑和删除字段:

    table = TipPredmetaTable(queryset)
    if not korisnik.is_kustos:
        table.exclude = ('edit', 'delete',) 
    

    【讨论】:

    • 该死,我确定我做到了。有用!我正在使用 pycharm,所以我太依赖他的自动完成功能,当我找不到 tabel.exclude 时,我认为下一步(不太合乎逻辑)将是使用 tabel.Meta.exclude,当然,这只会在创建时影响对象。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多