missing select_related for space in LocationSlugManager

This commit is contained in:
Laura Klünder 2018-12-27 15:07:01 +01:00
parent 45e7d056b3
commit 0204db8b3a

View file

@ -4,7 +4,7 @@ from operator import attrgetter
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.db import models from django.db import models
from django.db.models import Prefetch from django.db.models import FieldDoesNotExist, Prefetch
from django.urls import reverse from django.urls import reverse
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.text import format_lazy from django.utils.text import format_lazy
@ -22,8 +22,14 @@ class LocationSlugManager(models.Manager):
def get_queryset(self): def get_queryset(self):
result = super().get_queryset() result = super().get_queryset()
if self.model == LocationSlug: if self.model == LocationSlug:
result = result.select_related(*(model._meta.default_related_name for model in get_submodels(Location) + [LocationRedirect]:
for model in get_submodels(Location)+[LocationRedirect])) result = result.select_related(model._meta.default_related_name)
try:
model._meta.get_field('space')
except FieldDoesNotExist:
pass
else:
result = result.select_related(model._meta.default_related_name+'__space')
return result return result
def select_related_target(self): def select_related_target(self):