Django-tables2子类错误(类属性未传递给实例化对象)

时间:2018-06-24 03:41:22

标签: python django subclass django-tables2

我正在使用django-tables2并尝试创建一个新的DeleteColumn类:

tables.py

class DeleteColumn(tables.TemplateColumn):
    def __init__(self, *args, **kwargs):
        super(DeleteColumn, self).__init__(*args, **kwargs)

        self.template_name='wakemeup/admin/delete_link.html'
        self.verbose_name=''

class SchoolsTable(tables.Table):
    test = DeleteColumn()

    class Meta:
        model = School

我仍然收到此错误,但是:ValueError: A template must be provided

我不能正确创建课程吗?创建新的template_name实例时,为什么没有传递类中指定的DeleteColumn值?

有人可以指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

如果查看TemplateColumnhttp://django-tables2.readthedocs.io/en/latest/_modules/django_tables2/columns/templatecolumn.html)的来源,您会发现__init__()检查template_columntemplate_name属性,并且如果找不到,则抛出您提到的ValueError

现在的问题是,您在班级中调用了template_name后,将super(...).__init__属性设置为 ,因此template_name属性为空!

已编辑

对不起,我没有很认真地检查源代码,它以一种有趣的方式编写,并且没有使用属性。无论如何,从我现在看到的情况来看,您需要重写__init__才能将template_name参数传递给父对象的init,如下所示:

class DeleteColumn(tables.TemplateColumn):
    def __init__(self, *args, **kwargs):
        # This will pass ``template_name`` to the super().__init__ along with any args and kwargs
        super(DeleteColumn, self).__init__(*args, template_name='wakemeup/admin/delete_link.html', **kwargs)
        self.verbose_name=''

我希望它现在可以工作!