У меня есть таблица, основанная на модели с несколькими полями. У меня также есть два TemplateColumn
s, один для редактирования конкретного объекта, а другой для его удаления. Вот мой код:Django_tables2: динамически скрывающие столбцы на основе запроса
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
Теперь у меня есть иерархия пользователей в моей системе и только для пользователей, которые бухгалтеры могут редактировать и удалять данные. Это, как говорится, я пытался осуществить проверку на мой взгляд, чтобы скрыть два TemplateColumn
S:
@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. Я попытался отобразить их через поля, но это не помогло. Я предполагаю, что суперкласс, table.Table, не работает так.
Черт, я был уверен, Я это сделал. Оно работает! Я использую pycharm, поэтому я слишком полагаюсь на его автозаполнение, и когда я не смог найти tabel.exclude, я подумал, что следующий (не столь логичный) шаг должен состоять в том, чтобы перейти к tabel.Meta.exclude, что, конечно, влияет только на объект во время создания. Благодарю. – user2352164