Untitled
unknown
plain_text
2 years ago
4.5 kB
7
Indexable
class Recipe(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='recipes',
verbose_name='Автор',)
name = models.CharField(max_length=100,
verbose_name='Название рецепта',
help_text='Не больше 100 символов')
image = models.ImageField(upload_to='media/',
verbose_name='Изображение')
text = models.CharField(max_length=500,
verbose_name='Ваш рецепт',
help_text='Не большое 500 символов')
ingredients = models.ManyToManyField('Ingredient',
through='IngredientAmount',
related_name='recipes',
verbose_name='Ингредиенты')
tags = models.ManyToManyField('Tag', verbose_name='Тег')
cooking_time = models.PositiveSmallIntegerField(
validators=[
MinValueValidator(
1, 'Время приготовления не может быть меньше 1 минуты!'
),
MaxValueValidator(
180, 'Время приготовления не может быть более 3 часов!')],
default=1,
verbose_name='Время приготовления',
help_text='Время приготовления в минутах',
)
pub_date = models.DateTimeField(
auto_now_add=True,
verbose_name='Дата создания рецепта')
class Meta:
ordering = ('-pub_date',)
verbose_name = 'Рецепт'
verbose_name_plural = 'Рецепты'
def __str__(self):
return self.name
class Ingredient(models.Model):
name = models.CharField(max_length=100,
verbose_name='Название')
measurement_unit = models.CharField(max_length=10,
verbose_name='Единицы измерения')
class Meta:
verbose_name = 'Ингредиент'
verbose_name_plural = 'Ингредиенты'
def __str__(self):
return self.name
class IngredientAmount(models.Model):
ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE,
related_name='amount_ingredient',
verbose_name='Ингредиент')
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE,
related_name='amount_ingredient',
verbose_name='Рецепт')
amount = models.PositiveSmallIntegerField(
validators=[
MinValueValidator(
1, 'Количество ингредиентов не может быть меньше 1!'
),
MaxValueValidator(
1000, 'Количество ингредиентов не может быть больше 1000!'
)
],
default=1,
verbose_name='Количество',
)
class Meta:
verbose_name = 'Количество ингредиентов'
verbose_name_plural = 'Количество ингредиентов'
constraints = [
models.UniqueConstraint(
fields=['recipe', 'ingredient'],
name='unique_ingredient_in_recipe')]
def __str__(self):
return f'{self.ingredient} {self.recipe}'
class Subscription(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='follower',
verbose_name='Пользователь')
author = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='following',
verbose_name='Избранный автор')
class Meta:
verbose_name = 'Избранный автор'
verbose_name_plural = 'Избранные авторы'
constraints = [
models.UniqueConstraint(
fields=['user', 'author'], name='unique_relationships'),
models.CheckConstraint(
name='prevent_self_follow',
check=~models.Q(user=models.F('author')))]
def __str__(self):
return f'{self.user} {self.author}'
Editor is loading...