Skip to content

Commit

Permalink
2nd review fix 1
Browse files Browse the repository at this point in the history
  • Loading branch information
DianaKim9319 committed Nov 14, 2023
1 parent 6fafc5d commit f9c3f57
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 33 deletions.
6 changes: 3 additions & 3 deletions backend/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class Meta:
'recipes',
'recipes_count',
)
read_only_fields = ('__all__',)
read_only_fields = '__all__'

@staticmethod
def get_recipes_count(obj):
Expand All @@ -108,7 +108,7 @@ class TagSerializer(ModelSerializer):
class Meta:
model = Tag
fields = '__all__'
read_only_fields = ('__all__',)
read_only_fields = '__all__'


class IngredientSearchSerializer(ModelSerializer):
Expand All @@ -117,7 +117,7 @@ class IngredientSearchSerializer(ModelSerializer):
class Meta:
model = Ingredient
fields = '__all__'
read_only_fields = ('__all__',)
read_only_fields = '__all__'


class IngredientSerializer(ModelSerializer):
Expand Down
28 changes: 11 additions & 17 deletions backend/api/validators.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from django.core.exceptions import ValidationError
from django.conf import settings

MIN_INGREDIENT_AMOUNT = settings.MIN_INGREDIENT_AMOUNT
MAX_INGREDIENT_AMOUNT = settings.MAX_INGREDIENT_AMOUNT
MIN_COOKING_TIME = settings.MIN_COOKING_TIME
MAX_COOKING_TIME = settings.MAX_COOKING_TIME
from foodgram.settings import (MIN_INGR_AMOUNT,
MAX_INGR_AMOUNT,
MAX_COOK_TIME,
MIN_COOK_TIME)


def ingredients_validator(ingredients):
Expand All @@ -25,12 +23,11 @@ def ingredients_validator(ingredients):

ingredient_names.add(name)

if not MIN_INGREDIENT_AMOUNT <= amount <= MAX_INGREDIENT_AMOUNT:
if not MIN_INGR_AMOUNT <= amount <= MAX_INGR_AMOUNT:
raise ValidationError({
'amount': [
'Количество ингредиента должно быть от {} до {}.'.format(
MIN_INGREDIENT_AMOUNT, MAX_INGREDIENT_AMOUNT
)
f'Количество ингредиента должно быть от {MIN_INGR_AMOUNT} '
f'до {MAX_INGR_AMOUNT}.'
]
})

Expand All @@ -39,15 +36,12 @@ def ingredients_validator(ingredients):

def cooking_time_validator(cooking_time):
"""
Валидирует суммарное время готовки.
Проверяет минимальное и максимальное время готовки.
Валидирует минимальное и максимальное время готовки.
"""
if not MIN_COOKING_TIME <= cooking_time <= MAX_COOKING_TIME:
if not MIN_COOK_TIME <= cooking_time <= MAX_COOK_TIME:
raise ValidationError({
'cooking_time': [
'Время приготовления должно быть от {} до {} минут.'.format(
MIN_COOKING_TIME, MAX_COOKING_TIME
)
f'Время приготовления должно быть от {MIN_COOK_TIME} '
f'до {MAX_COOK_TIME} минут.'
]
})
8 changes: 4 additions & 4 deletions backend/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ def get_permissions(self):
class CustomUserViewSet(UserViewSet, AddDeleteMixin):
pagination_class = PageNumberPagination
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer

def get_serializer_class(self):
if self.action == 'set_password':
Expand Down Expand Up @@ -102,7 +101,7 @@ class TagViewSet(BasePermissionViewSet):


class RecipeViewSet(viewsets.ModelViewSet, AddDeleteMixin):
queryset = Recipe.objects.all().order_by('-id')
queryset = Recipe.objects.all()
pagination_class = PageNumberPagination
permission_classes = (AuthorOrReadOnly,)
filter_backends = (DjangoFilterBackend,)
Expand Down Expand Up @@ -188,9 +187,10 @@ def download_shopping_cart_list(self, request):
}

# Создаем динамический файл TXT
filename = settings.SHOPPING_LIST_FILENAME
response = HttpResponse(content_type=settings.CONTENT_TYPE)
response['Content-Disposition'] = f'attachment; filename={filename}'
response['Content-Disposition'] = (
f'attachment; filename={settings.SHOPPING_LIST_FILENAME}'
)

response.write('Ингредиент, Количество, Единица измерения:\n')

Expand Down
10 changes: 5 additions & 5 deletions backend/foodgram/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@
}
}

MIN_INGREDIENT_AMOUNT = 1
MAX_INGREDIENT_AMOUNT = 100
MIN_COOKING_TIME = 1
MAX_COOKING_TIME = 600
MIN_INGR_AMOUNT = 1
MAX_INGR_AMOUNT = 100
MIN_COOK_TIME = 1
MAX_COOK_TIME = 600

SHOPPING_LIST_FILENAME = 'shopping_list.txt'
CONTENT_TYPE = 'text/plain'
Expand Down Expand Up @@ -153,4 +153,4 @@

AUTH_USER_MODEL = 'users.CustomUser'

LANGUAGE_CODE = "ru"
LANGUAGE_CODE = 'ru'
2 changes: 1 addition & 1 deletion backend/recipes/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class RecipesAdmin(AdminPermissions):
list_display = ('name', 'author', 'favorite_count')
list_filter = ('author', 'name', 'tags')
search_fields = ('name', 'author__username')
inlines = [IngredientsAmountInline]
inlines = (IngredientsAmountInline,)
readonly_fields = ('favorite_count',)

def get_queryset(self, request):
Expand Down
28 changes: 27 additions & 1 deletion backend/recipes/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator

from users.models import CustomUser
from foodgram.settings import (MIN_COOK_TIME,
MAX_COOK_TIME,
MAX_INGR_AMOUNT,
MIN_INGR_AMOUNT)


class Tag(models.Model):
Expand Down Expand Up @@ -86,7 +92,17 @@ class Recipe(models.Model):
related_name='recipes',
)
cooking_time = models.PositiveSmallIntegerField(
verbose_name='Время приготовления (в минутах)'
verbose_name='Время приготовления (в минутах)',
validators=[
MinValueValidator(limit_value=MIN_COOK_TIME,
message=f'Время приготовления '
f'должно быть не менее '
f'{MIN_COOK_TIME}! минуты'),
MaxValueValidator(limit_value=MAX_COOK_TIME,
message=f'Время приготовления '
f'должно быть не более '
f'{MAX_COOK_TIME} минут!'),
]
)
pub_date = models.DateTimeField(
verbose_name='Дата публикации',
Expand Down Expand Up @@ -124,6 +140,16 @@ class IngredientsAmount(models.Model):
)
amount = models.PositiveSmallIntegerField(
verbose_name='Количество',
validators=[
MinValueValidator(limit_value=MIN_INGR_AMOUNT,
message=f'Количество ингредиента '
f'должно быть не менее '
f'{MIN_INGR_AMOUNT}!'),
MaxValueValidator(limit_value=MAX_INGR_AMOUNT,
message=f'Количество ингредиента '
f'должно быть не более '
f'{MAX_INGR_AMOUNT}!'),
],
default=0,
)

Expand Down
4 changes: 2 additions & 2 deletions backend/users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ class CustomUser(AbstractUser):
email = models.EmailField(
verbose_name='Адрес электронной почты',
max_length=254,
validators=[validate_email],
validators=(validate_email,),
unique=True)
password = models.CharField(
verbose_name='Пароль',
max_length=150,
)

class Meta:
ordering = ['username']
ordering = 'username'
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'

Expand Down

0 comments on commit f9c3f57

Please sign in to comment.