继承和修改“元类(Meta)”类

3

我有一个基础的ItemTable,然后有许多从它继承的表格。但我似乎无法修改元类。我尝试正常地包含元类,但不起作用,后来我在这个错误报告中发现了一些信息,并在下面实施了它。但是它悄无声息地失败了:表格仅呈现来自父元类的列。

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

编辑:代码已按照所示进行修改。我现在遇到一个NameError错误,提示fields未定义。


一个名为MetaMetaclass的类是两个不同的东西。 - Ashwini Chaudhary
好的...嗯,术语先不提——我会确保研究一下——那么我做错了什么? - thumbtackthief
3个回答

5

尝试:

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

在表格中扩展Meta时,您将遇到与普通Django模型相同的问题。


这种情况会默默失败,但不会添加新列。顺便说一下,这是我第一次尝试扩展“Meta”,所以我不知道它与非Django-tables2模型相比如何。 - thumbtackthief
我的愚蠢导致了这个问题,真是令人尴尬。这才是正确的解决方案。谢谢! - thumbtackthief

4

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

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

好的发现,但对于这个问题没有帮助。 - thumbtackthief
不行:所有的表格仍然只识别父级ItemTableMeta。没有错误信息。 - thumbtackthief
1
@thumbtackthief 这是一个django-tables问题,可以在文档中找到https://docs.djangoproject.com/en/dev/topics/db/models/#meta-inheritance。 - ndpu

0

你可能需要联系django-tables的作者解决这个问题。这不是标准Django的问题。


我已经添加到已知的错误报告中(2年前),但还没有得到回复。 - thumbtackthief

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接