Ошибка подкласса Django-tables2 (атрибуты класса не переданы объекту-объекту) - PullRequest
0 голосов
/ 24 июня 2018

Я использую 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 голосов
/ 25 июня 2018

Если вы посмотрите на источник TemplateColumn (http://django -tables2.readthedocs.io / en / latest / _modules / django_tables2 / columns / templatecolumn.html ), вы увидите__init__() проверяет наличие атрибута template_column или template_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=''

Надеюсь, это работает сейчас!

...