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

@@ -1,13 +1,18 @@
from rest_framework import serializers
from .models import *
class EquipmentSerializer(serializers.ModelSerializer):
class EquipmentSerializer(serializers.ModelSerializer):
class Meta:
model = Equipment
fields = '__all__'
class WorkoutEquipmentSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta:
model = WorkoutEquipment
fields = '__all__'
fields = '__all__'
def get_name(self, obj):
return obj.equipment.name

View File

@@ -6,9 +6,14 @@ from muscle.serializers import ExerciseMuscleSerializer
from equipment.serializers import WorkoutEquipmentSerializer
class ExerciseMuscleSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta:
model = ExerciseMuscle
fields = '__all__'
def get_name(self, obj):
return obj.muscle.name
class ExerciseSerializer(serializers.ModelSerializer):
muscles = 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',
'muscle',
'scripts',
'video'
'video',
'superset'
]
MIDDLEWARE = [

View File

@@ -6,6 +6,8 @@ from muscle.models import ExerciseMuscle
from equipment.models import WorkoutEquipment
from video.models import Video
from video.serializers import VideoSerializer
from superset.serializers import SupersetSerializer
from superset.models import Superset, SupersetExercise
class WorkoutExerciseSerializer(serializers.ModelSerializer):
exercise = ExerciseSerializer(read_only=True)
@@ -49,20 +51,30 @@ class WorkoutSerializer(serializers.ModelSerializer):
# depth = 1
def get_muscles(self, obj):
exercises = WorkoutExercise.objects.filter(workout=obj).values_list('exercise__id')
muscles_names = ExerciseMuscle.objects.filter(exercise__id__in=exercises).values_list('muscle__name', flat=True)
superset_ids = Superset.objects.filter(workout=obj).values_list('id')
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))
# 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):
exercises = WorkoutExercise.objects.filter(workout=obj).values_list('exercise__id')
equipment_names = WorkoutEquipment.objects.filter(exercise__id__in=exercises).values_list('equipment__name', flat=True)
superset_ids = Superset.objects.filter(workout=obj).values_list('id')
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))
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):
exercises = serializers.SerializerMethodField()
supersets = serializers.SerializerMethodField()
registered_user = serializers.SerializerMethodField()
male_videos = serializers.SerializerMethodField()
female_videos = serializers.SerializerMethodField()
@@ -70,12 +82,12 @@ class WorkoutDetailSerializer(serializers.ModelSerializer):
class Meta:
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
def get_exercises(self, obj):
objs = WorkoutExercise.objects.filter(workout=obj).order_by('created_at')
data = WorkoutExerciseSerializer(objs, many=True).data
def get_supersets(self, obj):
objs = Superset.objects.filter(workout=obj).order_by('order')
data = SupersetSerializer(objs, many=True).data
return data
def get_registered_user(self, obj):