fix LocationRedirect not working (fixes #60)

This commit is contained in:
Laura Klünder 2020-01-25 18:25:10 +01:00
parent 61b5437eb2
commit 68f1e32c9e

View file

@ -37,15 +37,17 @@ def locations_for_request(request) -> Mapping[int, LocationSlug]:
conditions = [] conditions = []
for model in get_submodels(Location): for model in get_submodels(Location):
related_name = model._meta.default_related_name related_name = model._meta.default_related_name
condition = Q(**{related_name + '__isnull': False}) for prefix in ('', 'redirect__target__'):
# noinspection PyUnresolvedReferences condition = Q(**{prefix + related_name + '__isnull': False})
condition &= model.q_for_request(request, prefix=related_name + '__') # noinspection PyUnresolvedReferences
conditions.append(condition) condition &= model.q_for_request(request, prefix=prefix + related_name + '__')
conditions.append(condition)
locations = locations.select_related( locations = locations.select_related(
related_name + '__label_settings' related_name + '__label_settings'
).prefetch_related( ).prefetch_related(
related_name + '__redirects' related_name + '__redirects'
) )
locations = locations.filter(reduce(operator.or_, conditions)) locations = locations.filter(reduce(operator.or_, conditions))
locations = locations.select_related('redirect', 'locationgroups__category') locations = locations.select_related('redirect', 'locationgroups__category')
@ -103,7 +105,7 @@ def locations_for_request(request) -> Mapping[int, LocationSlug]:
levels = {pk: obj for pk, obj in locations.items() if isinstance(obj, Level)} levels = {pk: obj for pk, obj in locations.items() if isinstance(obj, Level)}
for obj in locations.values(): for obj in locations.values():
if isinstance(obj, LocationRedirect): if isinstance(obj, LocationRedirect):
obj._target_cache = locations.get(obj.target_id, None) obj.target = locations.get(obj.target_id, None)
# apply better space geometries # apply better space geometries
for pk, geometry in get_better_space_geometries().items(): for pk, geometry in get_better_space_geometries().items():
@ -112,6 +114,8 @@ def locations_for_request(request) -> Mapping[int, LocationSlug]:
# precache cached properties # precache cached properties
for obj in locations.values(): for obj in locations.values():
if isinstance(obj, LocationRedirect):
continue
# noinspection PyStatementEffect # noinspection PyStatementEffect
obj.subtitle, obj.order obj.subtitle, obj.order
if isinstance(obj, GeometryMixin): if isinstance(obj, GeometryMixin):