首页 > 解决方案 > 如何在 Django Tables2 的列中自定义相关对象的显示文本?

问题描述

我正在使用 Django Tables 2 显示对象列表中的一些信息,包括具有相关对象的列。我正在尝试更改显示相关对象的列中显示的文本。

我的对象是:

工作

class Job(StatusModel):
    '''
    Model for jobs
    '''

    STATUS = statuses.JOB_STATUS

    start_time = models.DateTimeField(_('time'), default=timezone.now)
    pickup_address = models.TextField()
    ...
    destination_address = models.TextField()
    ...
    drivers = models.ManyToManyField(
        'Drivers.Driver',
        blank=True,
    )
    ...

    class Meta:
        verbose_name = _('job')
        verbose_name_plural = _('jobs')
        ordering = ('start_time',)

    def __str__(self):
        return self.start_time.strftime('%d/%m/%y %H:%M') + ' from ' + self.pickup_address

    def get_absolute_url(self):
        return reverse('job_view', args=[str(self.id)])

    ...

司机

class Driver(StatusModel):

   ...
    current_job = models.ForeignKey(
        Job,
        on_delete=models.CASCADE,
        blank=True,
        null=True,
        verbose_name=_('Current Job'),
        related_name='current_job'
    )
    ...
    def __str__(self):
        return self.user.get_full_name()

    ...

我的桌子:

class DriverStatusListTable(tables.Table):

    user = tables.Column(linkify=True, verbose_name=_('Driver'))
...
    current_job = tables.Column(linkify=True)

    class Meta:
        model = Driver
...

我希望“current_job”列显示与返回__str__的 Job 对象表示不同的文本 - 即: Job.start_time.strftime('%H:%M') + ' to ' + Job.destination_address, 但我无法弄清楚如何做到这一点,而不更改__str__Job 对象上的方法。

有任何想法吗?

标签: djangodjango-tables2

解决方案


编写一个Table.render_foo自定义值输出。

例子:


class DriverStatusListTable(tables.Table):
    user = tables.Column(linkify=True, verbose_name=_('Driver'))
    current_job = tables.Column(linkify=True)

    class Meta:
        model = Driver

    def render_current_job(self, value):
        return "Use 'value' parameter here and return useful resposne"

推荐阅读