Untitled
unknown
plain_text
2 years ago
4.5 kB
4
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...