2023-04-25 17:06:14 +02:00
|
|
|
from django.contrib import admin
|
|
|
|
|
|
|
|
# from django_extensions.admin import ForeignKeyAutocompleteAdmin
|
|
|
|
|
|
|
|
from django_admin_listfilter_dropdown.filters import (
|
|
|
|
DropdownFilter,
|
|
|
|
ChoiceDropdownFilter,
|
|
|
|
RelatedDropdownFilter,
|
|
|
|
)
|
|
|
|
|
|
|
|
from .models import (
|
|
|
|
TouchPosition,
|
|
|
|
Skill,
|
|
|
|
Routine,
|
|
|
|
RoutineSkill,
|
|
|
|
PrerequisiteClosure,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class TouchPositionAdmin(admin.ModelAdmin):
|
|
|
|
model = TouchPosition
|
|
|
|
|
|
|
|
list_display = ("long_label", "short_label", "allowed_in_competition", "is_default")
|
|
|
|
ordering = ("long_label", "short_label")
|
|
|
|
search_fields = ("long_label", "short_label")
|
|
|
|
list_filter = ("allowed_in_competition",)
|
|
|
|
|
|
|
|
|
|
|
|
def duplicate_skill(modeladmin, request, queryset): # pylint: disable=unused-argument
|
|
|
|
for obj in queryset:
|
|
|
|
obj.id = None
|
|
|
|
obj.save()
|
|
|
|
|
|
|
|
|
|
|
|
class SkillAdmin(admin.ModelAdmin):
|
|
|
|
model = Skill
|
|
|
|
|
|
|
|
fields = (
|
|
|
|
"long_label",
|
|
|
|
"short_label",
|
|
|
|
"informations",
|
|
|
|
"departure",
|
|
|
|
"landing",
|
|
|
|
"rotation_type",
|
|
|
|
"position",
|
|
|
|
"rotation",
|
|
|
|
"twist",
|
|
|
|
"difficulty",
|
|
|
|
"level",
|
|
|
|
"rank",
|
|
|
|
"notation",
|
|
|
|
"simplified_notation",
|
|
|
|
"is_competitive",
|
|
|
|
"age_boy_with_help",
|
|
|
|
"age_boy_without_help",
|
|
|
|
"age_boy_chained",
|
|
|
|
"age_boy_masterised",
|
|
|
|
"age_girl_with_help",
|
|
|
|
"age_girl_without_help",
|
|
|
|
"age_girl_chained",
|
|
|
|
"age_girl_masterised",
|
|
|
|
"prerequisites",
|
|
|
|
"educatives",
|
|
|
|
)
|
|
|
|
|
|
|
|
list_display = (
|
|
|
|
"long_label",
|
|
|
|
"difficulty",
|
|
|
|
"is_competitive",
|
|
|
|
"level",
|
|
|
|
"rank",
|
|
|
|
"notation",
|
|
|
|
)
|
|
|
|
|
|
|
|
ordering = ("long_label", "short_label")
|
|
|
|
search_fields = ("rank", "long_label", "short_label", "notation")
|
|
|
|
list_filter = (
|
|
|
|
"is_competitive",
|
|
|
|
("difficulty", DropdownFilter),
|
|
|
|
("departure", RelatedDropdownFilter),
|
|
|
|
("landing", RelatedDropdownFilter),
|
|
|
|
("level", DropdownFilter),
|
|
|
|
("rank", DropdownFilter),
|
|
|
|
"rotation_type",
|
|
|
|
("position", DropdownFilter),
|
|
|
|
("rotation", DropdownFilter),
|
|
|
|
("twist", DropdownFilter),
|
|
|
|
)
|
|
|
|
|
|
|
|
filter_horizontal = ("educatives", "prerequisites")
|
|
|
|
|
|
|
|
duplicate_skill.short_description = "Duplicate selected record"
|
|
|
|
|
|
|
|
class Media:
|
|
|
|
js = (
|
|
|
|
"js/core/jquery-3.6.0.min.js",
|
|
|
|
"js/admin/skill.js",
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class RoutineAdmin(admin.ModelAdmin):
|
|
|
|
model = Routine
|
|
|
|
|
|
|
|
fields = (
|
|
|
|
"long_label",
|
|
|
|
"short_label",
|
|
|
|
"difficulty",
|
|
|
|
"level",
|
|
|
|
"rank",
|
|
|
|
"educatives",
|
|
|
|
"prerequisites",
|
|
|
|
"age_boy_with_help",
|
|
|
|
"age_boy_without_help",
|
|
|
|
"age_boy_chained",
|
|
|
|
"age_boy_masterised",
|
|
|
|
"age_girl_with_help",
|
|
|
|
"age_girl_without_help",
|
|
|
|
"age_girl_chained",
|
|
|
|
"age_girl_masterised",
|
|
|
|
"is_active",
|
2023-05-01 17:07:50 +02:00
|
|
|
"is_routine",
|
2023-04-25 17:06:14 +02:00
|
|
|
"is_competitive",
|
|
|
|
)
|
|
|
|
list_display = (
|
|
|
|
"long_label",
|
|
|
|
"short_label",
|
|
|
|
"is_competitive",
|
2023-05-01 17:07:50 +02:00
|
|
|
"is_routine",
|
2023-04-25 17:06:14 +02:00
|
|
|
"is_active",
|
|
|
|
"level",
|
|
|
|
"rank",
|
|
|
|
"difficulty",
|
|
|
|
)
|
|
|
|
list_filter = (
|
|
|
|
("level", DropdownFilter),
|
2023-05-01 17:07:50 +02:00
|
|
|
("difficulty", DropdownFilter),
|
2023-04-25 17:06:14 +02:00
|
|
|
"is_competitive",
|
2023-05-01 17:07:50 +02:00
|
|
|
"is_routine",
|
2023-04-25 17:06:14 +02:00
|
|
|
"is_active",
|
|
|
|
)
|
|
|
|
search_fields = (
|
|
|
|
"long_label",
|
|
|
|
"short_label",
|
|
|
|
)
|
|
|
|
|
|
|
|
filter_horizontal = ("educatives",)
|
|
|
|
|
|
|
|
class Media:
|
|
|
|
js = (
|
|
|
|
"js/core/jquery-3.6.0.min.js",
|
|
|
|
"js/admin/routine.js",
|
|
|
|
)
|
|
|
|
|
|
|
|
# TODO: ne proposer QUE les SKILL comme educatif
|
|
|
|
# def get_related_filter(self, model, request):
|
|
|
|
# # print('boum')
|
|
|
|
# if not issubclass(model, Educative):
|
|
|
|
# return super(Skill, self).get_related_filter(model, request)
|
|
|
|
|
|
|
|
|
|
|
|
class RoutineSkillAdmin(admin.ModelAdmin):
|
|
|
|
model = RoutineSkill
|
|
|
|
|
|
|
|
list_display = ("routine", "skill", "rank")
|
|
|
|
list_filter = (("rank", DropdownFilter),)
|
|
|
|
search_fields = (
|
|
|
|
"routine__long_label",
|
|
|
|
"routine__short_label",
|
|
|
|
"skill__long_label",
|
|
|
|
"skill__short_label",
|
|
|
|
)
|
|
|
|
ordering = ("routine",)
|
|
|
|
autocomplete_fields = ("routine", "skill")
|
|
|
|
|
|
|
|
|
|
|
|
class PrerequisiteClosureAdmin(admin.ModelAdmin):
|
|
|
|
model = PrerequisiteClosure()
|
|
|
|
|
|
|
|
list_display = ("descendant", "ancestor", "level", "path")
|
|
|
|
search_fields = (
|
|
|
|
"descendant__long_label",
|
|
|
|
"descendant__short_label",
|
|
|
|
"ancestor__long_label",
|
|
|
|
"ancestor__short_label",
|
|
|
|
)
|
|
|
|
list_filter = (
|
|
|
|
("level", DropdownFilter),
|
|
|
|
("path", DropdownFilter),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
admin.site.register(TouchPosition, TouchPositionAdmin)
|
|
|
|
admin.site.register(Skill, SkillAdmin)
|
|
|
|
admin.site.register(Routine, RoutineAdmin)
|
|
|
|
admin.site.register(RoutineSkill, RoutineSkillAdmin)
|
|
|
|
admin.site.register(PrerequisiteClosure, PrerequisiteClosureAdmin)
|