Skip to content

Commit

Permalink
update training models, serializers and views
Browse files Browse the repository at this point in the history
  • Loading branch information
Evgeniy-Golodnykh committed Jun 11, 2024
1 parent d5aaf0e commit 75e6c48
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 266 deletions.
23 changes: 3 additions & 20 deletions blackfox/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers

from training.models import Diet, Anthropometry, Project
from training.models import FitnessDiary, Project

User = get_user_model()


class DietSerializer(serializers.ModelSerializer):
class FitnessDiarySerializer(serializers.ModelSerializer):
class Meta:
model = Diet
model = FitnessDiary
exclude = ['id']


Expand All @@ -18,23 +18,6 @@ class Meta:
fields = ['id']


class MeasurementSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
measurement_date = serializers.DateField()
steps = serializers.IntegerField(min_value=0)
weight = serializers.FloatField(max_value=250, min_value=30)
height = serializers.FloatField(max_value=250, min_value=30)
waist = serializers.FloatField(max_value=150, min_value=30)
belly = serializers.FloatField(max_value=150, min_value=30)
hips = serializers.FloatField(max_value=150, min_value=30)
chest = serializers.FloatField(max_value=150, min_value=30)

class Meta:
model = Anthropometry
fields = ['user', 'measurement_date', 'steps', 'weight',
'height', 'waist', 'belly', 'hips', 'chest']


class ProjectSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
coach = UserSerializer(read_only=True)
Expand Down
8 changes: 3 additions & 5 deletions blackfox/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

from django.urls import include, path
from djoser.views import UserViewSet
from rest_framework.routers import DefaultRouter
from rest_framework_simplejwt.views import (
TokenObtainPairView, TokenRefreshView,
)
from rest_framework.routers import DefaultRouter

from api.views import DietViewSet, MeasurementViewSet, ProjectViewSet

from api.views import FitnessDiaryViewSet, ProjectViewSet

router = DefaultRouter()
router.register('diet', DietViewSet, basename='diet')
router.register('measurement', MeasurementViewSet, basename='measurement')
router.register('fitness_diary', FitnessDiaryViewSet, basename='fitness_diary')
router.register('project', ProjectViewSet, basename='project')

urlpatterns = [
Expand Down
23 changes: 7 additions & 16 deletions blackfox/api/views.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,17 @@
from rest_framework import viewsets, filters
from rest_framework import filters, viewsets
from rest_framework.permissions import IsAuthenticatedOrReadOnly

from api.serializers import (DietSerializer,
MeasurementSerializer, ProjectSerializer)
from api.permissions import IsAdmin, IsCoach
from training.models import Diet, Anthropometry, Project
from api.serializers import FitnessDiarySerializer, ProjectSerializer
from training.models import FitnessDiary, Project


class DietViewSet(viewsets.ModelViewSet):
class FitnessDiaryViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticatedOrReadOnly]
serializer_class = DietSerializer
queryset = Diet.objects.all()
serializer_class = FitnessDiarySerializer
queryset = FitnessDiary.objects.all()
filter_backends = [filters.SearchFilter]
search_fields = ['user', 'diet_date']


class MeasurementViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticatedOrReadOnly]
serializer_class = MeasurementSerializer
queryset = Anthropometry.objects.all()
filter_backends = [filters.SearchFilter]
search_fields = ['user', 'measurement_date']
search_fields = ['user', 'date']

def perform_create(self, serializer):
serializer.save(user=self.request.user)
Expand Down
5 changes: 2 additions & 3 deletions blackfox/training/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django.contrib import admin

from training.models import Anthropometry, Diet, Project
from training.models import FitnessDiary, Project

admin.site.register(Anthropometry)
admin.site.register(Diet)
admin.site.register(FitnessDiary)
admin.site.register(Project)
245 changes: 23 additions & 222 deletions blackfox/training/models.py
Original file line number Diff line number Diff line change
@@ -1,258 +1,59 @@
from django.contrib.auth import get_user_model
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

from django.db import models

User = get_user_model()


class Diet(models.Model):
class FitnessDiary(models.Model):
"""FitnessDiary model for FatSecret data"""

user = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='спортсмен',
related_name='diet',
)
url = models.URLField(
verbose_name='ссылка на питание',
)
diet_date = models.DateField(
date = models.DateField(
verbose_name='дата питания',
db_index=True
)
calories = models.FloatField(
calories = models.PositiveIntegerField(
default=0,
verbose_name='калории',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
calories_rdr = models.FloatField(
default=0,
verbose_name='рсп калории',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
calories_perc = models.FloatField(
default=0,
verbose_name='% калории',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
protein = models.FloatField(
default=0,
verbose_name='белки',
validators=[MinValueValidator(0), MaxValueValidator(500)]
)
protein_rdr = models.FloatField(
default=0,
verbose_name='рсп белки',
validators=[MinValueValidator(0), MaxValueValidator(500)]
validators=[MinValueValidator(0), MaxValueValidator(10_000)]
)
protein_perc = models.FloatField(
carbohydrate = models.FloatField(
default=0,
verbose_name='% белки',
validators=[MinValueValidator(0), MaxValueValidator(100)]
verbose_name='углеводы',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
)
fat = models.FloatField(
default=0,
verbose_name='жиры',
validators=[MinValueValidator(0), MaxValueValidator(500)]
)
fat_rdr = models.FloatField(
default=0,
verbose_name='рсп жиры',
validators=[MinValueValidator(0), MaxValueValidator(500)]
)
fat_perc = models.FloatField(
default=0,
verbose_name='% жиры',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
carb = models.FloatField(
default=0,
verbose_name='углеводы',
validators=[MinValueValidator(0), MaxValueValidator(500)]
)
carb_rdr = models.FloatField(
default=0,
verbose_name='рсп углеводы',
validators=[MinValueValidator(0), MaxValueValidator(500)]
)
carb_perc = models.FloatField(
default=0,
verbose_name='% углеводы',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
fiber = models.FloatField(
default=0,
verbose_name='клетчатка',
validators=[MinValueValidator(0), MaxValueValidator(200)]
)
fiber_rdr = models.FloatField(
default=0,
verbose_name='рсп клетчатка',
validators=[MinValueValidator(0), MaxValueValidator(200)]
)
fiber_perc = models.FloatField(
default=0,
verbose_name='% клетчатка',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
water = models.FloatField(
default=0,
verbose_name='вода',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
water_rdr = models.FloatField(
default=0,
verbose_name='рсп вода',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
water_perc = models.FloatField(
default=0,
verbose_name='% вода',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
vitamin_d = models.FloatField(
default=0,
verbose_name='витамин Д',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
vitamin_d_rdr = models.FloatField(
default=0,
verbose_name='рсп витамин Д',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
vitamin_d_perc = models.FloatField(
default=0,
verbose_name='% витамин Д',
validators=[MinValueValidator(0), MaxValueValidator(100)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
)
potassium = models.FloatField(
default=0,
verbose_name='калий',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
potassium_rdr = models.FloatField(
default=0,
verbose_name='рсп калий',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
potassium_perc = models.FloatField(
default=0,
verbose_name='% калий',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
calcium = models.FloatField(
default=0,
verbose_name='кальций',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
calcium_rdr = models.FloatField(
default=0,
verbose_name='рсп кальций',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
calcium_perc = models.FloatField(
default=0,
verbose_name='% кальций',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
natrium = models.FloatField(
default=0,
verbose_name='натрий',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
natrium_rdr = models.FloatField(
default=0,
verbose_name='рсп натрий',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
natrium_perc = models.FloatField(
default=0,
verbose_name='% натрий',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
ferrum = models.FloatField(
default=0,
verbose_name='железо',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
ferrum_rdr = models.FloatField(
default=0,
verbose_name='рсп железо',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
ferrum_perc = models.FloatField(
default=0,
verbose_name='% железо',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)
cholesterin = models.FloatField(
default=0,
verbose_name='холистерин',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
cholesterin_rdr = models.FloatField(
default=0,
verbose_name='рсп холистерин',
validators=[MinValueValidator(0), MaxValueValidator(5000)]
)
cholesterin_perc = models.FloatField(
protein = models.FloatField(
default=0,
verbose_name='% холистерин',
validators=[MinValueValidator(0), MaxValueValidator(100)]
)

class Meta:
ordering = ['-diet_date']

def __str__(self):
return self.calories


class Anthropometry(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='спортсмен',
related_name='anthropometry',
)
measurement_date = models.DateField(
verbose_name='дата замера',
db_index=True
)
steps = models.PositiveIntegerField(
verbose_name='шаги',
verbose_name='белки',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
)
weight = models.FloatField(
verbose_name='вес',
validators=[MinValueValidator(30), MaxValueValidator(250)]
)
height = models.FloatField(
verbose_name='рост',
validators=[MinValueValidator(30), MaxValueValidator(250)]
)
waist = models.FloatField(
verbose_name='талия',
validators=[MinValueValidator(30), MaxValueValidator(150)]
)
belly = models.FloatField(
verbose_name='живот',
validators=[MinValueValidator(30), MaxValueValidator(150)]
)
hips = models.FloatField(
verbose_name='бедра',
validators=[MinValueValidator(30), MaxValueValidator(150)]
)
chest = models.FloatField(
verbose_name='грудь',
validators=[MinValueValidator(30), MaxValueValidator(150)]
)

class Meta:
ordering = ['-measurement_date']
ordering = ['-date']
constraints = [
models.UniqueConstraint(
fields=('user', 'date'),
name='unique_diets'
)
]

def __str__(self):
return f'''Данные {self.user.username} на {self.measurement_date}:
вес {self.weight} шаги {self.steps}'''
return f'Дневник питания {self.user.username} за {self.date} г.'


class Project(models.Model):
Expand Down Expand Up @@ -287,4 +88,4 @@ class Meta:
ordering = ['-start_date']

def __str__(self):
return f'Цель {self.target_weight} кг до {self.deadline}'
return f'Цель {self.target_weight} кг. до {self.deadline} г.'

0 comments on commit 75e6c48

Please sign in to comment.