diff --git a/apps/course/migrations/0002_auto_20180126_1325.py b/apps/course/migrations/0002_auto_20180126_1325.py new file mode 100644 index 00000000..14035e9e --- /dev/null +++ b/apps/course/migrations/0002_auto_20180126_1325.py @@ -0,0 +1,73 @@ +# Generated by Django 2.0.1 on 2018-01-26 13:25 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('course', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='category', + options={'verbose_name': 'Категория', 'verbose_name_plural': 'Категории'}, + ), + migrations.AlterModelManagers( + name='category', + managers=[ + ], + ), + migrations.RenameField( + model_name='course', + old_name='background', + new_name='cover', + ), + migrations.RenameField( + model_name='course', + old_name='deferred_start', + new_name='deferred_start_at', + ), + migrations.RenameField( + model_name='course', + old_name='is_highlighted', + new_name='is_featured', + ), + migrations.RemoveField( + model_name='course', + name='created_at', + ), + migrations.RemoveField( + model_name='course', + name='update_at', + ), + migrations.AddField( + model_name='course', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='course', + name='duration', + field=models.IntegerField(default=0, verbose_name='Продолжительность курса'), + ), + migrations.AddField( + model_name='course', + name='is_infinite', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='course', + name='status', + field=models.PositiveSmallIntegerField(choices=[(0, 'Pending'), (1, 'Published'), (2, 'Archived')], default=0, verbose_name='Статус'), + ), + migrations.AddField( + model_name='course', + name='url', + field=models.URLField(default='', verbose_name='Ссылка'), + ), + ] diff --git a/apps/course/migrations/0003_auto_20180126_1347.py b/apps/course/migrations/0003_auto_20180126_1347.py new file mode 100644 index 00000000..58808dde --- /dev/null +++ b/apps/course/migrations/0003_auto_20180126_1347.py @@ -0,0 +1,25 @@ +# Generated by Django 2.0.1 on 2018-01-26 13:47 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('course', '0002_auto_20180126_1325'), + ] + + operations = [ + migrations.AddField( + model_name='course', + name='created_at', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='course', + name='update_at', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/apps/course/models.py b/apps/course/models.py index 2c3b1102..bc2f48fc 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -1,32 +1,55 @@ +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 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("Краткое описание курса") - background = models.ImageField("Фон курса", upload_to='courses') + cover = models.ImageField("Фон курса", upload_to='courses') price = models.DecimalField("Цена курса", help_text="Если цены нету, то курс бесплатный", max_digits=10, decimal_places=2, null=True, blank=True) - is_highlighted = models.BooleanField(default=False) - deferred_start = models.DateTimeField("Отложенный запуск курса", help_text="Заполнить если курс отложенный", 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) - created_at = models.DateTimeField(auto_created=True) + 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: + if not self.deferred_start_at: return False - if timezone.now() < self.deferred_start: + if timezone.now() < self.deferred_start_at: return True return False @@ -38,7 +61,9 @@ class Course(models.Model): class Category(models.Model): title = models.CharField("Название категории", max_length=100) - manager = CategoryQuerySet.as_manager() - def __str__(self): return self.title + + class Meta: + verbose_name = "Категория" + verbose_name_plural = "Категории"