Add Injury and Stability

This commit is contained in:
Gregory Trullemans 2023-07-14 10:28:08 +02:00
parent 03d9873d54
commit 926c5d029f
4 changed files with 150 additions and 2 deletions

View File

@ -40,6 +40,13 @@
{% if form.skill.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.skill.errors %}{{ error }}{% endfor %}</span>{% endif %}
</div>
</div>
<div class="form-group row ">
<label for="id_injury_type" class="col-4 col-sm-3 col-form-label">{{ form.injury_type.label }}<span class="text-danger"><b>*</b></span></label>
<div class="col-sm-8 col-md-6 col-lg-6 col-xl-6 {% if form.injury_type.errors %}has-danger{% endif %}">
{{ form.injury_type }}
{% if form.injury_type.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.injury_type.errors %}{{ error }}{% endfor %}</span>{% endif %}
</div>
</div>
<div class="form-group row ">
<label for="id_mechanism" class="col-4 col-sm-3 col-form-label">{{ form.mechanism.label }} <span class="text-danger"><b>*</b></span></label>
<div class="col-5 col-sm-3 col-md-4 col-lg-4 col-xl-4 {% if form.mechanism.errors %}has-danger{% endif %}">

View File

@ -12,11 +12,15 @@ from .models import (
Point,
Chrono,
Injury,
SLBridge,
WellBeing,
Stability,
InjuryType,
HeightWeight,
LearnedSkill,
ChronoDetails,
InjuryLocation,
SidePlankLegRaise,
GymnastHasRoutine,
SeasonInformation,
NumberOfRoutineDone,
@ -97,6 +101,14 @@ class InjuryLocationAdmin(admin.ModelAdmin):
search_fields = ("label",)
class InjuryTypeAdmin(admin.ModelAdmin):
model = InjuryType
list_display = ("label",)
fields = ("label",)
search_fields = ("label",)
class InjuryAdmin(admin.ModelAdmin):
model = Injury
@ -104,9 +116,11 @@ class InjuryAdmin(admin.ModelAdmin):
"date",
"gymnast",
"skill",
"injury_type",
"mechanism",
"location",
"body_side",
"mechanism",
"diagnosis",
"nb_week_off",
"informations",
)
@ -260,12 +274,47 @@ class SeasonInformationAdmin(admin.ModelAdmin):
autocomplete_fields = ("gymnast",)
class SidePlankLegRaiseAdmin(admin.ModelAdmin):
model = SidePlankLegRaise
list_display = ("label",)
fields = ("label",)
search_fields = ("label",)
class SLBridgeAdmin(admin.ModelAdmin):
model = SLBridge
list_display = ("label",)
fields = ("label",)
search_fields = ("label",)
class StabilityAdmin(admin.ModelAdmin):
model = Stability
list_display = (
"gymnast",
"anterior_chain",
"posterior_chain_left",
"posterior_chain_right",
"leg_lowering",
)
list_filter = (("gymnast", RelatedDropdownFilter),)
search_fields = (
"gymnast__firstname",
"gymnast__lastname",
)
autocomplete_fields = ("gymnast",)
admin.site.register(Plan, PlanAdmin)
admin.site.register(Note, NoteAdmin)
admin.site.register(Point, PointAdmin)
admin.site.register(Chrono, ChronoAdmin)
admin.site.register(Injury, InjuryAdmin)
admin.site.register(WellBeing, WellBeingAdmin)
admin.site.register(InjuryType, InjuryTypeAdmin)
admin.site.register(LearnedSkill, LearnedSkillAdmin)
admin.site.register(HeightWeight, HeightWeightAdmin)
admin.site.register(ChronoDetails, ChronoDetailsAdmin)
@ -273,3 +322,7 @@ admin.site.register(InjuryLocation, InjuryLocationAdmin)
admin.site.register(SeasonInformation, SeasonInformationAdmin)
admin.site.register(GymnastHasRoutine, GymnastHasRoutineAdmin)
admin.site.register(NumberOfRoutineDone, NumberOfRoutineDoneAdmin)
admin.site.register(SLBridge, SLBridgeAdmin)
admin.site.register(SidePlankLegRaise, SidePlankLegRaiseAdmin)
admin.site.register(Stability, StabilityAdmin)

View File

@ -186,6 +186,7 @@ class InjuryForm(forms.ModelForm):
fields = (
"gymnast",
"date",
"injury_type",
"mechanism",
"location",
"body_side",
@ -203,6 +204,7 @@ class InjuryForm(forms.ModelForm):
),
"gymnast": forms.HiddenInput(),
"skill": forms.HiddenInput(),
"injury_type": forms.Select(attrs={"class": "form-control selectpicker"}),
"mechanism": forms.Select(attrs={"class": "form-control selectpicker"}),
"location": forms.Select(attrs={"class": "form-control selectpicker"}),
"body_side": forms.Select(attrs={"class": "form-control selectpicker"}),

View File

@ -23,6 +23,13 @@ INJURY_BODY_SIDE_CHOICE = (
(3, "Both"),
)
LUMBAR_STABILITY_CHOICE = (
(0, "Not able to maintain pressure"),
(1, "Step 1: OK"),
(2, "Step 2: OK"),
(3, "Step 3: OK"),
)
ROUTINE_TYPE_CHOICE = (
(0, "Other"),
(1, "Q1R1"),
@ -152,6 +159,21 @@ class InjuryLocation(models.Model):
return f"{self.label}"
class InjuryType(models.Model):
"""
Classe représentant les types de blessures
"""
class Meta:
verbose_name = "Injury Type"
verbose_name_plural = "Injury Types"
label = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return f"{self.label}"
class Injury(Markdownizable, Seasonisable):
"""
La classe `Injury` permet d'indiquer qu'un gymnaste a eu une blessure, en liaison avec un
@ -180,10 +202,19 @@ class Injury(Markdownizable, Seasonisable):
)
location = models.ForeignKey(
InjuryLocation,
verbose_name="Location",
verbose_name="Injury Location",
related_name="injuries",
on_delete=models.CASCADE,
)
injury_type = models.ForeignKey(
InjuryType,
verbose_name="Injury Type",
related_name="injuries",
on_delete=models.SET_NULL,
default=None,
blank=True,
null=True,
)
body_side = models.PositiveSmallIntegerField(
choices=INJURY_BODY_SIDE_CHOICE, verbose_name="Body side"
)
@ -538,3 +569,58 @@ class SeasonInformation(models.Model):
self.category,
self.club,
)
class SLBridge(models.Model):
""" """
class Meta:
verbose_name = "Stability - SLBridge"
label = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return f"{self.label}"
class SidePlankLegRaise(models.Model):
""" """
class Meta:
verbose_name = "Stability - SidePlankLegRaise"
label = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return f"{self.label}"
class Stability(Seasonisable):
"""Classe représentant l'intensité d'un entraînement"""
class Meta:
verbose_name = "Stability"
verbose_name_plural = "Stabilities"
gymnast = models.ForeignKey(
Gymnast, on_delete=models.CASCADE, related_name="stabilitytests"
)
anterior_chain = models.PositiveSmallIntegerField(
verbose_name="Anterior Chain"
)
posterior_chain_left = models.PositiveSmallIntegerField(
verbose_name="Posterior Chain Left"
)
posterior_chain_right = models.PositiveSmallIntegerField(
verbose_name="Posterior Chain Right"
)
leg_lowering = models.PositiveSmallIntegerField(
choices=LUMBAR_STABILITY_CHOICE,
verbose_name="Leg Lowering: lumbar stability",
)
sl_bridge = models.ManyToManyField(
SLBridge, related_name="stabilitytests", symmetrical=False
)
side_plank_leg_raise = models.ManyToManyField(
SidePlankLegRaise, related_name="stabilitytests", symmetrical=False
)