mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-06-22 12:38:24 +02:00
Improve Django-admin interface, inlines and filters
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
@ -7,11 +7,74 @@ from django.utils.translation import gettext_lazy as _
|
||||
from .models import Note, Participation, Passage, Pool, Solution, Synthesis, Team, Tournament, Tweak
|
||||
|
||||
|
||||
class ParticipationInline(admin.StackedInline):
|
||||
model = Participation
|
||||
extra = 0
|
||||
autocomplete_fields = ('team', 'tournament',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class ParticipationTabularInline(admin.TabularInline):
|
||||
model = Participation
|
||||
extra = 0
|
||||
fields = ('team', 'valid', 'final',)
|
||||
readonly_fields = ('team',)
|
||||
ordering = ('final', 'valid', 'team__trigram',)
|
||||
autocomplete_fields = ('tournament',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class SolutionInline(admin.TabularInline):
|
||||
model = Solution
|
||||
extra = 0
|
||||
ordering = ('problem',)
|
||||
autocomplete_fields = ('participation',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class SynthesisInline(admin.TabularInline):
|
||||
model = Synthesis
|
||||
extra = 0
|
||||
ordering = ('passage__solution_number', 'type',)
|
||||
autocomplete_fields = ('passage',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class PoolInline(admin.TabularInline):
|
||||
model = Pool
|
||||
extra = 0
|
||||
autocomplete_fields = ('tournament', 'participations', 'juries',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class PassageInline(admin.TabularInline):
|
||||
model = Passage
|
||||
extra = 0
|
||||
ordering = ('position',)
|
||||
autocomplete_fields = ('defender', 'opponent', 'reporter', 'observer',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class NoteInline(admin.TabularInline):
|
||||
model = Note
|
||||
extra = 0
|
||||
autocomplete_fields = ('jury',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class TweakInline(admin.TabularInline):
|
||||
model = Tweak
|
||||
extra = 0
|
||||
autocomplete_fields = ('participation', 'pool',)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
@admin.register(Team)
|
||||
class TeamAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'trigram', 'tournament', 'valid', 'final',)
|
||||
search_fields = ('name', 'trigram',)
|
||||
list_filter = ('participation__valid', 'participation__tournament', 'participation__final',)
|
||||
inlines = (ParticipationInline,)
|
||||
|
||||
@admin.display(description=_("tournament"))
|
||||
def tournament(self, record):
|
||||
@ -32,6 +95,7 @@ class ParticipationAdmin(admin.ModelAdmin):
|
||||
search_fields = ('team__name', 'team__trigram',)
|
||||
list_filter = ('valid',)
|
||||
autocomplete_fields = ('team', 'tournament',)
|
||||
inlines = (SolutionInline, SynthesisInline,)
|
||||
|
||||
|
||||
@admin.register(Pool)
|
||||
@ -40,6 +104,7 @@ class PoolAdmin(admin.ModelAdmin):
|
||||
list_filter = ('tournament', 'round', 'letter',)
|
||||
search_fields = ('participations__team__name', 'participations__team__trigram',)
|
||||
autocomplete_fields = ('tournament', 'participations', 'juries',)
|
||||
inlines = (PassageInline, TweakInline,)
|
||||
|
||||
@admin.display(description=_("teams"))
|
||||
def teams(self, record: Pool):
|
||||
@ -49,28 +114,30 @@ class PoolAdmin(admin.ModelAdmin):
|
||||
@admin.register(Passage)
|
||||
class PassageAdmin(admin.ModelAdmin):
|
||||
list_display = ('__str__', 'defender_trigram', 'solution_number', 'opponent_trigram', 'reporter_trigram',
|
||||
'pool_abbr', 'tournament')
|
||||
'pool_abbr', 'position', 'tournament')
|
||||
list_filter = ('pool__tournament', 'pool__round', 'pool__letter', 'solution_number',)
|
||||
search_fields = ('pool__participations__team__name', 'pool__participations__team__trigram',)
|
||||
ordering = ('pool__tournament', 'pool__round', 'pool__letter', 'position',)
|
||||
autocomplete_fields = ('pool', 'defender', 'opponent', 'reporter', 'observer',)
|
||||
inlines = (NoteInline,)
|
||||
|
||||
@admin.display(description=_("defender"))
|
||||
@admin.display(description=_("defender"), ordering='defender__team__trigram')
|
||||
def defender_trigram(self, record: Passage):
|
||||
return record.defender.team.trigram
|
||||
|
||||
@admin.display(description=_("opponent"))
|
||||
@admin.display(description=_("opponent"), ordering='opponent__team__trigram')
|
||||
def opponent_trigram(self, record: Passage):
|
||||
return record.opponent.team.trigram
|
||||
|
||||
@admin.display(description=_("reporter"))
|
||||
@admin.display(description=_("reporter"), ordering='reporter__team__trigram')
|
||||
def reporter_trigram(self, record: Passage):
|
||||
return record.reporter.team.trigram
|
||||
|
||||
@admin.display(description=_("pool"))
|
||||
@admin.display(description=_("pool"), ordering='pool__letter')
|
||||
def pool_abbr(self, record):
|
||||
return f"{record.pool.get_letter_display()}{record.pool.round}"
|
||||
|
||||
@admin.display(description=_("tournament"))
|
||||
@admin.display(description=_("tournament"), ordering='pool__tournament__name')
|
||||
def tournament(self, record: Passage):
|
||||
return record.pool.tournament
|
||||
|
||||
@ -124,9 +191,11 @@ class SynthesisAdmin(admin.ModelAdmin):
|
||||
|
||||
@admin.register(Tournament)
|
||||
class TournamentAdmin(admin.ModelAdmin):
|
||||
list_display = ('name',)
|
||||
list_display = ('name', 'date_start', 'date_end',)
|
||||
search_fields = ('name',)
|
||||
ordering = ('date_start', 'name',)
|
||||
autocomplete_fields = ('organizers',)
|
||||
inlines = (ParticipationTabularInline, PoolInline,)
|
||||
|
||||
|
||||
@admin.register(Tweak)
|
||||
|
Reference in New Issue
Block a user