Fixes #17124: BaseTable should follow reverse one-to-one relationships when prefetching related objects

This commit is contained in:
Jeremy Stretch 2024-08-10 11:58:14 -04:00
parent 20967bf88d
commit 9c7002f691

View File

@ -6,6 +6,7 @@ from django.contrib.auth.models import AnonymousUser
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.core.exceptions import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.db.models.fields.related import RelatedField from django.db.models.fields.related import RelatedField
from django.db.models.fields.reverse_related import ManyToOneRel
from django.urls import reverse from django.urls import reverse
from django.urls.exceptions import NoReverseMatch from django.urls.exceptions import NoReverseMatch
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@ -102,7 +103,7 @@ class BaseTable(tables.Table):
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except FieldDoesNotExist: except FieldDoesNotExist:
break break
if isinstance(field, RelatedField): if isinstance(field, (RelatedField, ManyToOneRel)):
# Follow ForeignKeys to the related model # Follow ForeignKeys to the related model
prefetch_path.append(field_name) prefetch_path.append(field_name)
model = field.remote_field.model model = field.remote_field.model