2017-02-23 35 views
1

Я использую Django 1.8.7 с djangotables2 1.3.0. Я пытаюсь построить таблицу с использованием ModelForm (пример ниже). Когда я пытаюсь скрыть столбец, используя exclude, он все равно показывает все столбцы. Исключить, похоже, не имеет никакого эффекта.Таблицы Django 2 исключают не работает

Часть моего models.py:

class Event(models.Model): 
    Name = models.CharField (max_length = 45, blank = False, null = False) 
    Date = models.DateTimeField (auto_now_add=True) 
    Text = models.CharField (max_length = 64, blank = False, null = False) 
    class Meta: 
     ordering = ["-Date", "Name"] 
     verbose_name = "Event" 
     verbose_name_plural = "Events" 
     def __str__(self): 
      return self.Name 


class Event_Form(ModelForm): 
    class Meta: 
     model=Event 
     exclude = ('Date',) 

Часть моего views.py:

def dbtest_event(request,): 
    return render(request, 'dbtest_event.html', {"Title":"Events", 
    'dbtest_event':Event.objects.all()}) 

И HTML-файл, который использует таблицу:

{% extends "dbtest.html" %} 
{% load render_table from django_tables2 %} 
{% load static %} 
{% block content %} 
    {% render_table dbtest_event %} 
{% endblock %} 

Заранее благодарим за помощь или идеи!

+2

Я не понимаю, почему значения exclude из метаданных ModelForm автоматически будут переведены в мета-таблицу. Можете ли вы опубликовать код, в котором определена ваша таблица? то есть что-то, что подклассы 'django_tables2.Table'? – nimasmi

+0

Стол на самом деле не создан никем, насколько я знаю. Я обновлю вопрос с частью моих views.py и html-файла, это все, что связано с таблицей, которую я думаю. – Nkls155

+0

Вы используете только тег '{% render_table%}'? – nimasmi

ответ

0

Ваш код представления фактически не ссылается на класс Event_Form, поэтому нет причин, по которым ваше исключение будет уделено внимание.

Из документов http://django-tables2.readthedocs.io/en/latest/pages/tutorial.html:

Хотя просто, проходя QuerySet непосредственно {% render_table%} не позволяет какой-либо настройки. Для этого необходимо определить пользовательскую таблицу класс

так что вы должны определить таблицу явно

class EventTable(django_tables2.Table): 

    class Meta: 
     model = Event 
     exclude = ('Date',) 

Затем убедитесь, что таблица доступна в контексте вашего шаблона

def dbtest_event(request,): 
    table = EventTable(Events.objects.all()) 
    RequestConfig(request).configure(table) 
    return render(request, 'dbtest_event.html', { 
     "Title":"Events", 
     'dbtest_event_table': table, 
    }) 

(если вам не нужна разбивка на страницы или фильтрация на основе параметров GET, тогда можно отключить линию RequestConfig.)

И, наконец, используйте {% render_table dbtest_event_table %}.

+0

Спасибо, это сработало для меня. У меня есть последний вопрос: возможно ли это сделать с идентификатором вместо даты? Я попробовал это, но это не сработало. Я думаю, это потому, что база данных определила этот атрибут не мной. – Nkls155

+0

Использовал ли вы 'id' в нижнем регистре (он обозначен как« ID »в заголовке таблицы, но имя атрибута в Python -' id')? – nimasmi

+0

Так оно и было, теперь все хорошо. Спасибо за вашу помощь! – Nkls155

Смежные вопросы