fix LocationRedirect not working (fixes #60)
This commit is contained in:
parent
61b5437eb2
commit
68f1e32c9e
1 changed files with 9 additions and 5 deletions
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue