Fix map initialization and park area selection in moderation submission edit view

This commit is contained in:
pacnpal
2024-11-14 01:56:56 +00:00
parent d9990ae241
commit fd97ed31cb
3 changed files with 420 additions and 79 deletions

View File

@@ -1,54 +1,56 @@
from django import template
from django.apps import apps
from django.core.exceptions import ObjectDoesNotExist
from rides.models import CATEGORY_CHOICES
from django.utils.safestring import mark_safe
from django.contrib.contenttypes.models import ContentType
register = template.Library()
@register.filter
def get_object(value, model_path):
"""
Template filter to get an object instance from its ID and model path.
Usage: {{ value|get_object:'app_label.ModelName' }}
"""
def get_object_name(value, model_path):
"""Get object name from ID and model path."""
if not value:
return None
app_label, model = model_path.split('.')
try:
app_label, model_name = model_path.split('.')
model = apps.get_model(app_label, model_name)
return model.objects.get(id=value)
except (ValueError, LookupError, ObjectDoesNotExist):
content_type = ContentType.objects.get(app_label=app_label.lower(), model=model.lower())
model_class = content_type.model_class()
obj = model_class.objects.get(id=value)
return str(obj)
except Exception:
return None
@register.filter
def get_category_display(value):
"""
Template filter to get the display name for a ride category.
Usage: {{ value|get_category_display }}
"""
try:
return dict(CATEGORY_CHOICES).get(value, value)
except (KeyError, AttributeError):
return value
@register.filter
def get_object_name(value, model_path):
"""
Template filter to get an object's name from its ID and model path.
Usage: {{ value|get_object_name:'app_label.ModelName' }}
"""
obj = get_object(value, model_path)
return obj.name if obj else None
"""Get display value for ride category."""
if not value:
return None
categories = {
'RC': 'Roller Coaster',
'DR': 'Dark Ride',
'FR': 'Flat Ride',
'WR': 'Water Ride',
'TR': 'Transport',
'OT': 'Other'
}
return categories.get(value, value)
@register.filter
def get_park_area_name(value, park_id):
"""
Template filter to get a park area's name from its ID and park ID.
Usage: {{ value|get_park_area_name:park_id }}
"""
try:
ParkArea = apps.get_model('parks', 'ParkArea')
area = ParkArea.objects.get(id=value, park_id=park_id)
return area.name
except (ValueError, LookupError, ObjectDoesNotExist):
"""Get park area name from ID and park ID."""
if not value or not park_id:
return None
try:
from parks.models import ParkArea
area = ParkArea.objects.get(id=value, park_id=park_id)
return str(area)
except Exception:
return None
@register.filter
def get_item(dictionary, key):
"""Get item from dictionary by key."""
if not dictionary or not key:
return []
return dictionary.get(str(key), [])