feat: add scouting search MVP list and player detail
This commit is contained in:
65
app/scouting/forms.py
Normal file
65
app/scouting/forms.py
Normal file
@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
|
||||
from django import forms
|
||||
|
||||
from .models import Competition, Role, Season, Specialty, Team
|
||||
|
||||
|
||||
class PlayerSearchForm(forms.Form):
|
||||
name = forms.CharField(required=False, label="Name")
|
||||
|
||||
position = forms.ChoiceField(
|
||||
required=False,
|
||||
choices=[("", "Any")] + [
|
||||
("PG", "PG"),
|
||||
("SG", "SG"),
|
||||
("SF", "SF"),
|
||||
("PF", "PF"),
|
||||
("C", "C"),
|
||||
],
|
||||
)
|
||||
role = forms.ModelChoiceField(required=False, queryset=Role.objects.none())
|
||||
specialty = forms.ModelChoiceField(required=False, queryset=Specialty.objects.none())
|
||||
|
||||
min_age = forms.IntegerField(required=False, min_value=0)
|
||||
max_age = forms.IntegerField(required=False, min_value=0)
|
||||
min_height_cm = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
max_height_cm = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
min_weight_kg = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
max_weight_kg = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
|
||||
competition = forms.ModelChoiceField(required=False, queryset=Competition.objects.none())
|
||||
season = forms.ModelChoiceField(required=False, queryset=Season.objects.none())
|
||||
team = forms.ModelChoiceField(required=False, queryset=Team.objects.none())
|
||||
|
||||
min_points = forms.DecimalField(required=False, max_digits=6, decimal_places=2)
|
||||
min_assists = forms.DecimalField(required=False, max_digits=6, decimal_places=2)
|
||||
min_steals = forms.DecimalField(required=False, max_digits=6, decimal_places=2)
|
||||
max_turnovers = forms.DecimalField(required=False, max_digits=6, decimal_places=2)
|
||||
min_blocks = forms.DecimalField(required=False, max_digits=6, decimal_places=2)
|
||||
|
||||
min_efg_pct = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
min_ts_pct = forms.DecimalField(required=False, max_digits=5, decimal_places=2)
|
||||
min_plus_minus = forms.DecimalField(required=False, max_digits=7, decimal_places=2)
|
||||
min_offensive_rating = forms.DecimalField(required=False, max_digits=7, decimal_places=2)
|
||||
max_defensive_rating = forms.DecimalField(required=False, max_digits=7, decimal_places=2)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields["role"].queryset = Role.objects.order_by("name")
|
||||
self.fields["specialty"].queryset = Specialty.objects.order_by("name")
|
||||
self.fields["competition"].queryset = Competition.objects.order_by("name")
|
||||
self.fields["season"].queryset = Season.objects.order_by("-start_year")
|
||||
self.fields["team"].queryset = Team.objects.order_by("name")
|
||||
|
||||
@staticmethod
|
||||
def birth_date_upper_bound_for_age(min_age: int) -> date:
|
||||
today = date.today()
|
||||
return today.replace(year=today.year - min_age)
|
||||
|
||||
@staticmethod
|
||||
def birth_date_lower_bound_for_age(max_age: int) -> date:
|
||||
today = date.today()
|
||||
return today.replace(year=today.year - max_age - 1)
|
||||
Reference in New Issue
Block a user