Files
thrillwiki_django_no_react/rides/admin.py
2025-08-15 12:24:20 -04:00

74 lines
2.3 KiB
Python

from django.contrib import admin
from django.contrib.gis.admin import GISModelAdmin
from .models.company import Company
from .models.rides import Ride
from .models.location import RideLocation
class ManufacturerAdmin(admin.ModelAdmin):
list_display = ('name', 'headquarters', 'website', 'rides_count')
search_fields = ('name',)
def get_queryset(self, request):
return super().get_queryset(request).filter(roles__contains=['MANUFACTURER'])
class DesignerAdmin(admin.ModelAdmin):
list_display = ('name', 'headquarters', 'website')
search_fields = ('name',)
def get_queryset(self, request):
return super().get_queryset(request).filter(roles__contains=['DESIGNER'])
class RideLocationInline(admin.StackedInline):
"""Inline admin for RideLocation"""
model = RideLocation
extra = 0
fields = (
'park_area',
'point',
'entrance_notes',
'accessibility_notes',
)
class RideLocationAdmin(GISModelAdmin):
"""Admin for standalone RideLocation management"""
list_display = ('ride', 'park_area', 'has_coordinates', 'created_at')
list_filter = ('park_area', 'created_at')
search_fields = ('ride__name', 'park_area', 'entrance_notes')
readonly_fields = ('latitude', 'longitude', 'coordinates', 'created_at', 'updated_at')
fieldsets = (
('Ride', {
'fields': ('ride',)
}),
('Location Information', {
'fields': ('park_area', 'point', 'latitude', 'longitude', 'coordinates'),
'description': 'Optional coordinates - not all rides need precise location tracking'
}),
('Navigation Notes', {
'fields': ('entrance_notes', 'accessibility_notes'),
}),
('Metadata', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
def latitude(self, obj):
return obj.latitude
latitude.short_description = 'Latitude'
def longitude(self, obj):
return obj.longitude
longitude.short_description = 'Longitude'
class RideAdmin(admin.ModelAdmin):
"""Enhanced Ride admin with location inline"""
inlines = [RideLocationInline]
admin.site.register(Company)
admin.site.register(Ride, RideAdmin)
admin.site.register(RideLocation, RideLocationAdmin)