2014-02-14 4 views
2

Итак, у меня есть базовый ItemTable, а затем ряд таблиц, которые наследуются от него. Кажется, я не могу изменить класс Meta. Я пробовал просто включать мета-класс нормально, и он не работал, затем я нашел this bug report и реализовал его ниже. Он терпит неудачу: таблицы отображают только столбцы из родительского метакласса.Наследовать и изменять класс `Meta`

class ItemTable(tables.Table): 

    class Meta: 
     model = Item 
     attrs = {"class":"paleblue"} 
     fields = ('name', 'primary_tech', 'primary_biz', 'backup_tech', 'backup_biz') 

class ApplicationTable(ItemTable): 

    def __init__(self, *args, **kwargs): 
     super(ApplicationTable, self).__init__(*args, **kwargs) 

    class Meta(ItemTable.Meta): 
     model = Application 
     fields += ('jira_bucket_name',) 

EDIT: Код изменен, как показано. Теперь я получаю NameError, что fields не определен.

+0

Класс с именем 'Meta' и' Metaclass' - это две разные вещи. –

+0

ОК ... ну, терминология в стороне - и я обязательно буду исследовать это - что я делаю неправильно? – thumbtackthief

ответ

1

Try:

class ApplicationTable(ItemTable): 
    class Meta: 
     model = Application 
     fields = ItemTable.Meta.fields + ('jira_bucket_name',) 

Вы будете иметь те же проблемы, простирающиеся Meta в таблице, как вы будете в нормальной модели Django.

+0

Это терпит неудачу, но не добавляет новые столбцы. FWIW, это первый раз, когда я когда-либо пробовал расширять 'Meta', поэтому я не знаю, как он сравнивается с моделью, отличной от django-tables2. – thumbtackthief

+0

С моей стороны был смущающий уровень идиотизма, который не позволял этому работать. Это правильное решение. Благодаря! – thumbtackthief

4

Вы не добавили , (запятая) в одноэлементный кортеж. Попробуйте изменить эту строку Meta.attrs['fields'] += ('jira_bucket_name') в ApplicationTable к:

Meta.attrs['fields'] += ('jira_bucket_name',) 

, если оно не поможет попытаться создать мета определение класса OutSite класса модели:

class ItemTableMeta: 
    model = Item 
    attrs = {"class":"paleblue"} 
    fields = ('name', 'primary_tech', 'primary_biz', 'backup_tech', 'backup_biz') 

class ApplicationTableMeta(ItemTableMeta): 
    model = Application 
    fields = ItemTableMeta.fields + ('jira_bucket_name',) 


class ItemTable(tables.Table): 
    #... 
    Meta = ItemTableMeta 

class ApplicationTable(ItemTable): 
    #... 
    Meta = ApplicationTableMeta 
+0

Хороший улов, но не помог с этой проблемой. – thumbtackthief

+0

Нет кубиков: все таблицы по-прежнему распознают только родительский ItemTableMeta. Нет сообщений об ошибках. – thumbtackthief

+1

@thumbtackthief это проблема с django-таблицами, найденная в документах https://docs.djangoproject.com/en/dev/topics/db/models/#meta-inheritance – ndpu

0

Вы, возможно, должны принять это вверх с Джанго столов автор. Это не проблема со стандартным Django.

+0

Я добавил к известному отчету об ошибке (2 года), но пока не получили ответа. – thumbtackthief

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