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)