admin.py
1 from django.contrib import admin 2 from django_admin_listfilter_dropdown.filters import DropdownFilter, RelatedDropdownFilter # ChoiceDropdownFilter, 3 from django_admin_relation_links import AdminChangeLinksMixin 4 5 from .models import ( 6 Car, 7 Coach, 8 Driver, 9 FastLap, 10 FastLapSegment, 11 Game, 12 Landmark, 13 Lap, 14 Session, 15 SessionType, 16 Track, 17 TrackGuide, 18 TrackGuideNote, 19 ) 20 21 22 class FastLapAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 23 list_display = ["track"] 24 changelist_links = ["fast_lap_segments", "laps"] 25 list_display = ["game", "car", "track", "driver"] 26 27 28 class FastLapSegmentAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 29 list_display = [ 30 "fast_lap", 31 "turn", 32 "start", 33 "end", 34 "brake", 35 "turn_in", 36 "force", 37 "gear", 38 "stop", 39 "accelerate", 40 "speed", 41 "mark", 42 ] 43 change_links = [] 44 45 46 class LapAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 47 list_display = [ 48 "id", 49 "get_driver", 50 "valid", 51 "number", 52 "get_game", 53 "track", 54 "car", 55 "length", 56 "time", 57 "session", 58 "start", 59 "end", 60 ] 61 # list_filter = ["car", "track"] 62 list_filter = ( 63 # for ordinary fields 64 ("valid", DropdownFilter), 65 # for choice fields 66 # ('valid', ChoiceDropdownFilter), 67 # for related fields 68 ("car", RelatedDropdownFilter), 69 ("track", RelatedDropdownFilter), 70 ) 71 fields = ["number", "valid", "length", "time", "start", "end"] 72 changelist_links = ["session"] 73 change_links = ["session", "track", "car"] 74 75 # https://stackoverflow.com/questions/163823/can-list-display-in-a-django-modeladmin-display-attributes-of-foreignkey-field 76 @admin.display(ordering="session__driver", description="Driver") 77 def get_driver(self, obj): 78 return obj.session.driver 79 80 @admin.display(ordering="session__game", description="Game") 81 def get_game(self, obj): 82 return obj.session.game 83 84 85 class DriverAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 86 list_display = ["name", "created", "modified"] 87 changelist_links = ["sessions"] 88 89 90 class SessionAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 91 list_display = ["session_id", "driver", "game", "session_type", "start", "end"] 92 changelist_links = ["laps"] 93 94 95 class TrackAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 96 list_display = ["name", "game", "created", "modified"] 97 changelist_links = ["laps", "landmarks", "fast_laps"] 98 99 100 class CarAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 101 list_display = ["name", "game"] 102 changelist_links = ["laps", "fast_laps"] 103 104 105 class GameAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 106 list_display = ["name"] 107 changelist_links = ["tracks", "cars", "sessions"] 108 109 110 # class CoachInline(admin.TabularInline): 111 # model = Coach 112 113 114 class CoachAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 115 list_display = ["driver", "mode", "created", "modified"] 116 fields = ["driver", "error", "status", "mode"] 117 118 # changelist_links = ["se"] 119 120 121 class LandmarkAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 122 list_display = ["name", "kind", "start", "end", "created", "modified"] 123 124 125 class TrackGuideAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 126 list_display = ["car_game", "car", "track", "name", "created", "modified"] 127 changelist_links = ["notes"] 128 129 130 class TrackGuideNoteAdmin(AdminChangeLinksMixin, admin.ModelAdmin): 131 list_display = ["segment", "priority", "ref_id", "ref_eval", "message", "eval", "notes"] 132 133 134 # class DriverAdmin(admin.ModelAdmin): 135 # model = Driver 136 # display = ('name') 137 # inlines = [CoachInline, ] 138 139 140 admin.site.register(Car, CarAdmin) 141 admin.site.register(SessionType) 142 admin.site.register(Lap, LapAdmin) 143 admin.site.register(Track, TrackAdmin) 144 admin.site.register(Game, GameAdmin) 145 admin.site.register(Driver, DriverAdmin) 146 admin.site.register(Session, SessionAdmin) 147 admin.site.register(FastLap, FastLapAdmin) 148 admin.site.register(FastLapSegment, FastLapSegmentAdmin) 149 admin.site.register(Coach, CoachAdmin) 150 admin.site.register(Landmark, LandmarkAdmin) 151 admin.site.register(TrackGuide, TrackGuideAdmin) 152 admin.site.register(TrackGuideNote, TrackGuideNoteAdmin)