Добавить дополнительный столбец в таблицы в django_tables2
Я хочу добавить дополнительный столбец, которого нет в моей модели. И я применяю одно из решений на этом сайте к своему проекту. Но это не работает должным образом.
model.py
class Companies(models.Model):
legal_name = models.CharField(max_length=120, blank=True)
co_name = models.CharField(max_length=120, blank=True)
client = models.ForeignKey(Clients, models.SET_NULL, blank=True, null=True)
tel_no = models.CharField(max_length=120, blank=True)
email = models.EmailField(null=True, blank=True)
address = models.TextField(null=True, blank=True)
contact = models.CharField(max_length=250, blank=True)
con_tel_no = models.CharField(max_length=120, blank=True)
entity = models.CharField(max_length=2, null=True)
yearend = models.DateField(null=True, blank=True)
bn = models.CharField(max_length=9)
memo = models.TextField(null=True, blank=True)
slug = models.SlugField(null=True, blank=True)
def t2_due_date(self):
now_year = datetime.date.today().year
if self.entity == 'CO':
yearend_ = DateWidget.decompress(self, self.yearend)
if yearend_[1] > 6:
yearend_[2] = now_year + 1
yearend_[1] -= 6
else:
yearend_[2] = now_year
yearend_[1] += 6
t2_due = DateWidget.compress(self, yearend_)
return t2_due
tables.py
class ScheduleTable(tables.Table):
due_date_col = tables.Column(accessor='t2_due_date', verbose_name='T2 Due Date')
class Meta:
attrs = {"class": "paleblue", "width":"100%"}
fields = ['client','legal_name', 'co_name', 'entity', 'yearend', 'due_date_col']
model = Companies
Когда я запускаю эту программу, 'due_date_col' всегда пуст. Кажется, что функция ('t2_due_date) не проходит. Есть ли у вас какие-либо подсказки, чтобы решить эту проблему?
1 ответ
Насколько я знаю accessor
указывает на связанные объекты, а не на свойства модели, методы и т. д.
То, что вы можете попробовать, это использовать Table.render_{column}
как так:
class ScheduleTable(tables.Table):
def render_due_date_col(self, record):
return record.t2_due_date()
Посмотрите djanog таблицы официальный документ для получения дополнительной информации.