继承和修改`Meta`类

时间:2014-02-14 19:29:44

标签: python django django-tables2

所以我有一个基础ItemTable,然后是一些继承它的表。我似乎无法修改Meta类。我尝试通常只包含元类,但它没有用,然后我找到了this bug report并在下面实现了它。它以静默方式失败:表格仅使用父元类中的列进行渲染。

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',)

编辑:代码修改如图所示。我现在得到一个未定义fields的NameError。

3 个答案:

答案 0 :(得分:4)

您没有将,(逗号)添加到单元素元组中。尝试将Meta.attrs['fields'] += ('jira_bucket_name')中的这一行ApplicationTable更改为:

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

如果它没有帮助尝试创建Meta类外部模型类定义:

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

答案 1 :(得分:1)

尝试:

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

在表格中扩展Meta会有同样的问题,就像在普通的Django模型中一样。

答案 2 :(得分:0)

您可能需要使用django-tables作者来解决这个问题。这不是标准Django的问题。