This commit is contained in:
Trey t
2023-07-17 19:26:18 -05:00
parent a18aec02d6
commit 0b8cdc77a1
18 changed files with 266 additions and 13 deletions

Binary file not shown.

View File

@@ -8,6 +8,11 @@ class EquipmentSerializer(serializers.ModelSerializer):
class WorkoutEquipmentSerializer(serializers.ModelSerializer): class WorkoutEquipmentSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta: class Meta:
model = WorkoutEquipment model = WorkoutEquipment
fields = '__all__' fields = '__all__'
def get_name(self, obj):
return obj.equipment.name

View File

@@ -6,10 +6,15 @@ from muscle.serializers import ExerciseMuscleSerializer
from equipment.serializers import WorkoutEquipmentSerializer from equipment.serializers import WorkoutEquipmentSerializer
class ExerciseMuscleSerializer(serializers.ModelSerializer): class ExerciseMuscleSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta: class Meta:
model = ExerciseMuscle model = ExerciseMuscle
fields = '__all__' fields = '__all__'
def get_name(self, obj):
return obj.muscle.name
class ExerciseSerializer(serializers.ModelSerializer): class ExerciseSerializer(serializers.ModelSerializer):
muscles = serializers.SerializerMethodField() muscles = serializers.SerializerMethodField()
equipment = serializers.SerializerMethodField() equipment = serializers.SerializerMethodField()

0
superset/__init__.py Normal file
View File

22
superset/admin.py Normal file
View File

@@ -0,0 +1,22 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import *
# Register your models here.
@admin.register(SupersetExercise)
class SupersetExerciseAdmin(ImportExportModelAdmin):
search_fields = ['exercise']
class SupersetExerciseInline(admin.StackedInline):
model = SupersetExercise
ordering = ("pk",)
extra = 0
@admin.register(Superset)
class SupersetAdmin(ImportExportModelAdmin):
list_display = ("name", "workout", "order", "rounds",)
ordering = ("order",)
inlines = [
SupersetExerciseInline,
]

6
superset/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class SupersetConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'superset'

View File

@@ -0,0 +1,38 @@
# Generated by Django 4.2.2 on 2023-07-17 18:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('exercise', '0006_alter_exercise_name'),
('workout', '0011_alter_completedworkout_notes'),
]
operations = [
migrations.CreateModel(
name='Superset',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(blank=True, max_length=255, null=True)),
('rounds', models.IntegerField(blank=True, max_length=3, null=True)),
('workout', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workout.workout')),
],
),
migrations.CreateModel(
name='SupersetExercise',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='superset_exercise_exercise', to='exercise.exercise')),
('superset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='superset_exercise_exercise', to='superset.superset')),
],
),
]

View File

@@ -0,0 +1,28 @@
# Generated by Django 4.2.2 on 2023-07-17 18:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('superset', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='supersetexercise',
name='duration',
field=models.IntegerField(blank=True, max_length=4, null=True),
),
migrations.AddField(
model_name='supersetexercise',
name='reps',
field=models.IntegerField(blank=True, max_length=4, null=True),
),
migrations.AddField(
model_name='supersetexercise',
name='weight',
field=models.IntegerField(blank=True, max_length=4, null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-07-17 18:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('superset', '0002_supersetexercise_duration_supersetexercise_reps_and_more'),
]
operations = [
migrations.AddField(
model_name='superset',
name='order',
field=models.IntegerField(blank=True, max_length=3, null=True),
),
]

View File

@@ -0,0 +1,25 @@
# Generated by Django 4.2.2 on 2023-07-17 18:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('superset', '0003_superset_order'),
]
operations = [
migrations.AlterField(
model_name='superset',
name='order',
field=models.IntegerField(default=1, max_length=3),
preserve_default=False,
),
migrations.AlterField(
model_name='superset',
name='rounds',
field=models.IntegerField(default=1, max_length=3),
preserve_default=False,
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 4.2.2 on 2023-07-17 19:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('superset', '0004_alter_superset_order_alter_superset_rounds'),
]
operations = [
migrations.AddField(
model_name='supersetexercise',
name='order',
field=models.IntegerField(default=1, max_length=3),
preserve_default=False,
),
]

View File

41
superset/models.py Normal file
View File

@@ -0,0 +1,41 @@
from django.db import models
from workout.models import Workout
from exercise.models import Exercise
# Create your models here.
class Superset(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
name = models.CharField(max_length=255, blank=True, null=True)
workout = models.ForeignKey(
Workout,
on_delete=models.CASCADE
)
rounds = models.IntegerField(max_length=3, blank=False, null=False)
order = models.IntegerField(max_length=3, blank=False, null=False)
def __str__(self):
return self.name #+ " : " + self.description + " | by: " + self.registered_user.nick_name
class SupersetExercise(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
exercise = models.ForeignKey(
Exercise,
on_delete=models.CASCADE,
related_name='superset_exercise_exercise'
)
superset = models.ForeignKey(
Superset,
on_delete=models.CASCADE,
related_name='superset_exercise_exercise'
)
weight = models.IntegerField(null=True, blank=True, max_length=4)
reps = models.IntegerField(null=True, blank=True, max_length=4)
duration = models.IntegerField(null=True, blank=True, max_length=4)
order = models.IntegerField(max_length=3, blank=False, null=False)

27
superset/serializers.py Normal file
View File

@@ -0,0 +1,27 @@
from rest_framework import serializers
from .models import *
from exercise.models import Exercise
from exercise.serializers import ExerciseSerializer
class SupersetExerciseSerializer(serializers.ModelSerializer):
exercise = serializers.SerializerMethodField()
class Meta:
model = SupersetExercise
fields = '__all__'
def get_exercise(self, obj):
data = ExerciseSerializer(obj.exercise, many=False).data
return data
class SupersetSerializer(serializers.ModelSerializer):
exercises = serializers.SerializerMethodField()
class Meta:
model = Superset
fields = '__all__'
def get_exercises(self, obj):
objs = SupersetExercise.objects.filter(superset=obj).order_by('order')
data = SupersetExerciseSerializer(objs, many=True).data
return data

3
superset/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
superset/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@@ -40,7 +40,8 @@ INSTALLED_APPS = [
'workout', 'workout',
'muscle', 'muscle',
'scripts', 'scripts',
'video' 'video',
'superset'
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@@ -6,6 +6,8 @@ from muscle.models import ExerciseMuscle
from equipment.models import WorkoutEquipment from equipment.models import WorkoutEquipment
from video.models import Video from video.models import Video
from video.serializers import VideoSerializer from video.serializers import VideoSerializer
from superset.serializers import SupersetSerializer
from superset.models import Superset, SupersetExercise
class WorkoutExerciseSerializer(serializers.ModelSerializer): class WorkoutExerciseSerializer(serializers.ModelSerializer):
exercise = ExerciseSerializer(read_only=True) exercise = ExerciseSerializer(read_only=True)
@@ -49,20 +51,30 @@ class WorkoutSerializer(serializers.ModelSerializer):
# depth = 1 # depth = 1
def get_muscles(self, obj): def get_muscles(self, obj):
exercises = WorkoutExercise.objects.filter(workout=obj).values_list('exercise__id') superset_ids = Superset.objects.filter(workout=obj).values_list('id')
muscles_names = ExerciseMuscle.objects.filter(exercise__id__in=exercises).values_list('muscle__name', flat=True) exercise_ids = SupersetExercise.objects.filter(superset__id__in=superset_ids).values_list('exercise__id')
muscles_names = ExerciseMuscle.objects.filter(exercise__id__in=exercise_ids).values_list('muscle__name', flat=True)
return list(set(muscles_names)) return list(set(muscles_names))
# muscles_names = ExerciseMuscle.objects.filter(exercise__id__in=exercises).values_list('muscle__name', flat=True)
# return list(set(muscles_names))
def get_equipment(self, obj): def get_equipment(self, obj):
exercises = WorkoutExercise.objects.filter(workout=obj).values_list('exercise__id') superset_ids = Superset.objects.filter(workout=obj).values_list('id')
equipment_names = WorkoutEquipment.objects.filter(exercise__id__in=exercises).values_list('equipment__name', flat=True) exercise_ids = SupersetExercise.objects.filter(superset__id__in=superset_ids).values_list('exercise__id')
equipment_names = WorkoutEquipment.objects.filter(exercise__id__in=exercise_ids).values_list('equipment__name', flat=True)
return list(set(equipment_names)) return list(set(equipment_names))
def get_exercise_count(self, obj): def get_exercise_count(self, obj):
return WorkoutExercise.objects.filter(workout=obj).count() returnValue = 0
supersets = Superset.objects.filter(workout=obj)
for superset in supersets:
exercise_count = SupersetExercise.objects.filter(superset=superset).count()
returnValue += (superset.rounds * exercise_count)
return returnValue
class WorkoutDetailSerializer(serializers.ModelSerializer): class WorkoutDetailSerializer(serializers.ModelSerializer):
exercises = serializers.SerializerMethodField() supersets = serializers.SerializerMethodField()
registered_user = serializers.SerializerMethodField() registered_user = serializers.SerializerMethodField()
male_videos = serializers.SerializerMethodField() male_videos = serializers.SerializerMethodField()
female_videos = serializers.SerializerMethodField() female_videos = serializers.SerializerMethodField()
@@ -70,12 +82,12 @@ class WorkoutDetailSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Workout model = Workout
fields = ('id', 'name', 'description', 'exercises', 'registered_user', 'male_videos', 'female_videos', 'both_videos') fields = ('id', 'name', 'description', 'supersets', 'registered_user', 'male_videos', 'female_videos', 'both_videos')
depth = 1 depth = 1
def get_exercises(self, obj): def get_supersets(self, obj):
objs = WorkoutExercise.objects.filter(workout=obj).order_by('created_at') objs = Superset.objects.filter(workout=obj).order_by('order')
data = WorkoutExerciseSerializer(objs, many=True).data data = SupersetSerializer(objs, many=True).data
return data return data
def get_registered_user(self, obj): def get_registered_user(self, obj):