2020-11-21 15:11:32 +01:00
|
|
|
from django.views import generic
|
2020-11-21 15:40:35 +01:00
|
|
|
from django.views.generic.edit import FormMixin
|
2020-11-21 11:41:15 +01:00
|
|
|
|
2020-11-21 15:40:35 +01:00
|
|
|
from exercises.forms import QueryForm
|
2020-11-21 15:11:32 +01:00
|
|
|
from exercises.models import Exercise
|
|
|
|
|
|
|
|
|
2020-11-21 15:40:35 +01:00
|
|
|
class RandomExercisesView(generic.ListView, FormMixin):
|
2020-11-21 15:11:32 +01:00
|
|
|
model = Exercise
|
|
|
|
context_object_name = "exercises"
|
2020-11-21 15:40:35 +01:00
|
|
|
form_class = QueryForm
|
2020-11-21 15:11:32 +01:00
|
|
|
|
|
|
|
def get_queryset(self):
|
2020-11-21 15:40:35 +01:00
|
|
|
form = self.get_form()
|
2020-11-22 12:59:46 +01:00
|
|
|
if not form.is_valid():
|
|
|
|
print(form.errors)
|
|
|
|
for field in form:
|
|
|
|
print(field.name, field.errors)
|
|
|
|
return Exercise.objects.order_by("?")[:5]
|
|
|
|
|
2020-11-21 15:40:35 +01:00
|
|
|
base_queryset = self.get_base_queryset(form)
|
2020-11-22 12:59:46 +01:00
|
|
|
filters = {}
|
|
|
|
body_regions = form.cleaned_data.get("body_regions")
|
|
|
|
if body_regions:
|
|
|
|
filters.update({"body_regions__in": body_regions})
|
|
|
|
number_of_exercises = form.cleaned_data.get("number_of_exercises")
|
|
|
|
return base_queryset.filter(**filters).order_by("?")[:number_of_exercises]
|
2020-11-21 15:40:35 +01:00
|
|
|
|
2020-11-22 12:59:46 +01:00
|
|
|
def get_base_queryset(self, valid_form):
|
|
|
|
data = valid_form.cleaned_data
|
2020-11-21 15:40:35 +01:00
|
|
|
rating = data.get("rating")
|
|
|
|
if rating == QueryForm.BALANCED_CHOICE:
|
|
|
|
return Exercise.objects.get_balanced()
|
|
|
|
elif rating == QueryForm.CARDIO_CHOICE:
|
|
|
|
return Exercise.objects.get_mostly_cardio()
|
|
|
|
elif rating == QueryForm.STRENGTHENING_CHOICE:
|
|
|
|
return Exercise.objects.get_mostly_strengthening()
|
2020-11-22 12:59:46 +01:00
|
|
|
else:
|
|
|
|
return Exercise.objects.all()
|
2020-11-21 15:40:35 +01:00
|
|
|
|
|
|
|
def get_form_kwargs(self):
|
|
|
|
kwargs = super().get_form_kwargs()
|
|
|
|
get = self.request.GET
|
|
|
|
if get:
|
|
|
|
kwargs.update({"data": get})
|
|
|
|
return kwargs
|