|
|
|
@ -5,6 +5,7 @@ import unidecode |
|
|
|
from django.contrib.postgres.fields import ArrayField |
|
|
|
from django.contrib.postgres.fields import ArrayField |
|
|
|
from django.db import models |
|
|
|
from django.db import models |
|
|
|
from django.template.defaultfilters import slugify |
|
|
|
from django.template.defaultfilters import slugify |
|
|
|
|
|
|
|
from model_utils import Choices |
|
|
|
|
|
|
|
|
|
|
|
from lms.tools import get_real_name, get_empty_list |
|
|
|
from lms.tools import get_real_name, get_empty_list |
|
|
|
|
|
|
|
|
|
|
|
@ -79,47 +80,6 @@ class Topic(models.Model): |
|
|
|
unique_together = ('sort', 'course') |
|
|
|
unique_together = ('sort', 'course') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CourseManager(models.Manager): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_or_create_course(self, image=None, big_image=None, old_slug=None, |
|
|
|
|
|
|
|
big_mobile_image=None, slug=None, teacher_tokens=None, |
|
|
|
|
|
|
|
level=None, direction=None, **kwargs): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
slug = slug if slug else old_slug |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kwargs['teacher_tokens'] = teacher_tokens |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if image: |
|
|
|
|
|
|
|
kwargs['image'] = image |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if big_image: |
|
|
|
|
|
|
|
kwargs['big_image'] = big_image |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if big_mobile_image: |
|
|
|
|
|
|
|
kwargs['big_mobile_image'] = big_mobile_image |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if level: |
|
|
|
|
|
|
|
kwargs['level'] = get_real_name(COURSE_LEVEL, level) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if direction: |
|
|
|
|
|
|
|
kwargs['direction'] = get_real_name(COURSE_DIRECTION, direction[0]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
|
|
course = self.get(slug=old_slug) |
|
|
|
|
|
|
|
for i in kwargs: |
|
|
|
|
|
|
|
if kwargs[i]: |
|
|
|
|
|
|
|
setattr(course, i, kwargs[i]) |
|
|
|
|
|
|
|
course.slug = slug |
|
|
|
|
|
|
|
course.save() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except self.DoesNotExist: |
|
|
|
|
|
|
|
if not slug is None: |
|
|
|
|
|
|
|
kwargs['slug'] = slug |
|
|
|
|
|
|
|
course = self.create(**kwargs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return course |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def upload_image(instance, _filename): |
|
|
|
def upload_image(instance, _filename): |
|
|
|
return 'courses/%s/image.png' % instance.slug |
|
|
|
return 'courses/%s/image.png' % instance.slug |
|
|
|
|
|
|
|
|
|
|
|
@ -137,6 +97,8 @@ def default_slug(): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Course(models.Model): |
|
|
|
class Course(models.Model): |
|
|
|
|
|
|
|
PRODUCERS = Choices('skillbox', 'Ingate', 'AIC') |
|
|
|
|
|
|
|
|
|
|
|
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False) |
|
|
|
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False) |
|
|
|
slug = models.SlugField(unique=True, editable=False, max_length=127, default=default_slug) |
|
|
|
slug = models.SlugField(unique=True, editable=False, max_length=127, default=default_slug) |
|
|
|
title = models.CharField(verbose_name="Заголовок", max_length=255, unique=True) |
|
|
|
title = models.CharField(verbose_name="Заголовок", max_length=255, unique=True) |
|
|
|
@ -155,6 +117,8 @@ class Course(models.Model): |
|
|
|
big_mobile_image = models.ImageField(verbose_name='Под мобилку', blank=True, upload_to=upload_mobile_image, |
|
|
|
big_mobile_image = models.ImageField(verbose_name='Под мобилку', blank=True, upload_to=upload_mobile_image, |
|
|
|
help_text='Большая картинка для мобильной версии', max_length=255) |
|
|
|
help_text='Большая картинка для мобильной версии', max_length=255) |
|
|
|
hidden = models.BooleanField(verbose_name='Видно только оплатившим', default=False) |
|
|
|
hidden = models.BooleanField(verbose_name='Видно только оплатившим', default=False) |
|
|
|
|
|
|
|
producer = models.CharField( |
|
|
|
|
|
|
|
choices=PRODUCERS, default=PRODUCERS.skillbox, max_length=15, verbose_name="Производитель") |
|
|
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
def __str__(self): |
|
|
|
return self.title |
|
|
|
return self.title |
|
|
|
@ -202,8 +166,6 @@ class Course(models.Model): |
|
|
|
except IndexError: |
|
|
|
except IndexError: |
|
|
|
pass |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
objects = CourseManager() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
class Meta: |
|
|
|
verbose_name = "Курс" |
|
|
|
verbose_name = "Курс" |
|
|
|
verbose_name_plural = "Курсы" |
|
|
|
verbose_name_plural = "Курсы" |
|
|
|
|