/ components / paddock / telemetry / admin.py
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)