Lugaxx
Lugaxx

Reputation: 331

django-tables2: Changing default column title of a foreign key column

How do I change the column title for a foreign value in django-tables2?

Model

class Employer(models.Model):
    name = models.CharField(verbose_name='Name', max_length=16)

class Employee(models.Model):
    name = models.CharField(verbose_name='Name', max_length=16)
    employer = models.ForeignKey(Employer, verbose_name='Employer')

Table

class EmployeeTable(tables.Table)
    class Meta:
        model = EmployeeTable
        fields = ('name', 'employer.name')

Output

Name | Name
Bill | Steve

I would like to override the default column headers to provide more meaningful information.

Preferred output

Employee name | Employer name
Bill          | Steve

Table (not working)

class EmployeeTable(tables.Table)
    name = tables.Column(verbose_name='Employee name')          # <-- Works!
    employer.name = tables.Column(verbose_name='Employer name') # <-- Doesn't work!
    class Meta:
        model = EmployeeTable
        fields = ('name', 'employer.name')

Upvotes: 0

Views: 1164

Answers (1)

Lugaxx
Lugaxx

Reputation: 331

I've found a solution. You have to use an Accessor.

from django_tables2.utils import Accessor

class EmployeeTable(tables.Table)
    name = tables.Column(verbose_name='Employee name')
    employer_name = tables.Column(verbose_name='Employer name', orderable=False, accessor=Accessor('employer.name'))
    class Meta:
        model = EmployeeTable
        fields = ('name', 'employer_name')

Upvotes: 2

Related Questions