import arrow from django.db import models from django.utils import timezone from django.contrib.auth import get_user_model from .manager import CategoryQuerySet User = get_user_model() class Like(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) class Course(models.Model): STATUS_CHOICES = ( (0, 'Pending'), (1, 'Published'), (2, 'Archived'), ) author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) title = models.CharField("Название курса", max_length=100) short_description = models.TextField("Краткое описание курса") cover = models.ImageField("Фон курса", upload_to='courses') price = models.DecimalField("Цена курса", help_text="Если цены нету, то курс бесплатный", max_digits=10, decimal_places=2, null=True, blank=True) is_infinite = models.BooleanField(default=False) deferred_start_at = models.DateTimeField("Отложенный запуск курса", help_text="Заполнить если курс отложенный", null=True, blank=True) category = models.ForeignKey("Category", on_delete=models.PROTECT) duration = models.IntegerField("Продолжительность курса", default=0) is_featured = models.BooleanField(default=False) url = models.URLField('Ссылка', default='') status = models.PositiveSmallIntegerField('Статус', default=0, choices=STATUS_CHOICES) likes = models.ManyToManyField(Like) created_at = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) @property def is_free(self): if self.price: return False return True @property def deferred_start_at_humanize(self): return arrow.get(self.deferred_start_at).humanize(locale='ru') @property def created_at_humanize(self): return arrow.get(self.created_at).humanize(locale='ru') @property def is_deferred_start(self): if not self.deferred_start_at: return False if timezone.now() < self.deferred_start_at: return True return False class Meta: verbose_name = "Курс" verbose_name_plural = "Курсы" ordering = ['-created_at'] class Category(models.Model): title = models.CharField("Название категории", max_length=100) def __str__(self): return self.title class Meta: verbose_name = "Категория" verbose_name_plural = "Категории"