diff --git a/django_tables2/columns/base.py b/django_tables2/columns/base.py index b0aa69f..ea27678 100644 --- a/django_tables2/columns/base.py +++ b/django_tables2/columns/base.py @@ -5,6 +5,7 @@ from itertools import islice import warnings from django.db.models.fields import FieldDoesNotExist +from django import VERSION as django_version import six from django_tables2.templatetags.django_tables2 import title @@ -465,8 +466,13 @@ class BoundColumn(object): parts = self.accessor.split('.') field = None for part in parts: + try: - field = model._meta.get_field(part) + if django_version < (1, 8, 0): + field, _, _, _ = model._meta.get_field_by_name(part) + else: + field = model._meta.get_field(part) + except FieldDoesNotExist: break if hasattr(field, 'rel') and hasattr(field.rel, 'to'): @@ -474,7 +480,10 @@ class BoundColumn(object): continue break if field: - name = field.verbose_name + if hasattr(field, 'field'): + name = field.field.verbose_name + else: + name = field.verbose_name return name @property diff --git a/tests/app/models.py b/tests/app/models.py index 335f225..18a8da9 100644 --- a/tests/app/models.py +++ b/tests/app/models.py @@ -54,6 +54,11 @@ class Region(models.Model): return self.name +class PersonInformation(models.Model): + person = models.ForeignKey( + Person, related_name='info_list', verbose_name='Information') + + # -- haystack ----------------------------------------------------------------- if not six.PY3: # Haystack isn't compatible with Python 3 diff --git a/tests/columns/test_general.py b/tests/columns/test_general.py index b5a2443..7a08d85 100644 --- a/tests/columns/test_general.py +++ b/tests/columns/test_general.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy from django.utils.safestring import mark_safe, SafeData +import pytest import django_tables2 as tables from ..app.models import Person @@ -51,6 +52,17 @@ def test_should_support_safe_verbose_name_via_model(): assert isinstance(table.columns["safe"].header, SafeData) +@pytest.mark.django_db +def test_handle_verbose_name_of_many2onerel(): + + class Table(tables.Table): + count = tables.Column(accessor='info_list.count') + + Person.objects.create(first_name='bradley', last_name='ayers') + table = Table(Person.objects.all()) + assert table.columns['count'].verbose_name == 'Information' + + def test_sortable_backwards_compatibility(): # Table.Meta.sortable (not set) class SimpleTable(tables.Table):