From d2613889420b5cdc9c3707c2996e1fa6abc0e6d1 Mon Sep 17 00:00:00 2001 From: gzbender Date: Mon, 23 Jul 2018 02:48:31 +0500 Subject: [PATCH 1/2] =?UTF-8?q?LIL-595=20=D0=A1=D0=BE=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B2=D0=BE=D0=B4=D0=B5=20=D0=BA=D1=83=D1=80=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BD=D0=B0=20=D1=81=D0=B0=D0=B9=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/course/models.py | 2 +- apps/course/views.py | 15 ++++++++- web/src/components/CourseRedactor.vue | 44 +++++++++++++-------------- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/apps/course/models.py b/apps/course/models.py index 942a0593..b716d53b 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -97,7 +97,7 @@ class Course(BaseModel, DeactivatedMixin): class Meta: verbose_name = 'Курс' verbose_name_plural = 'Курсы' - ordering = ['-created_at'] + ordering = ['-is_featured', ] def __str__(self): return str(self.id) + ' ' + self.title diff --git a/apps/course/views.py b/apps/course/views.py index 8cff720a..1d961625 100644 --- a/apps/course/views.py +++ b/apps/course/views.py @@ -1,3 +1,4 @@ +from random import shuffle from paymentwall import Pingback from django.contrib.auth import get_user_model @@ -234,7 +235,6 @@ class CoursesView(ListView): def get(self, request, *args, **kwargs): self.object_list = self.get_queryset() - allow_empty = self.get_allow_empty() if request.is_ajax(): context = self.get_context_data() template_name = self.get_template_names() @@ -276,6 +276,19 @@ class CoursesView(ListView): context = super().get_context_data() filtered = CourseFilter(self.request.GET) context.update(filtered.data) + # Иммитация order_by('?'), чтобы можно было использовать пагинацию + # если что, сделать свой QuerySet для Course с методом, который возвращает такой список + course_items = context.get('course_items') + featured = [] + other = [] + for ci in course_items: + if ci.is_featured: + featured.append(ci) + else: + other.append(ci) + shuffle(featured) + shuffle(other) + context['course_items'] = featured + other return context def get_template_names(self): diff --git a/web/src/components/CourseRedactor.vue b/web/src/components/CourseRedactor.vue index f4291156..3b2f279f 100644 --- a/web/src/components/CourseRedactor.vue +++ b/web/src/components/CourseRedactor.vue @@ -992,28 +992,28 @@ }); } - // let user = api.getCurrentUser(this.accessToken); - // promises.push(user); - // - // user.then((response) => { - // if (response.data) { - // this.me = response.data; - // - // if(this.me.role == ROLE_ADMIN) { - // api.getUsers({role: [ROLE_AUTHOR,ROLE_ADMIN], page_size: 1000}, this.accessToken) - // .then((usersResponse) => { - // if (usersResponse.data) { - // this.users = usersResponse.data.results.map((user) => { - // return { - // title: `${user.first_name} ${user.last_name}`, - // value: user.id - // } - // }); - // } - // }); - // } - // } - // }); + let user = api.getCurrentUser(this.accessToken); + promises.push(user); + + user.then((response) => { + if (response.data) { + this.me = response.data; + + /* if(this.me.role == ROLE_ADMIN) { + api.getUser(this.me.id, {role: [ROLE_AUTHOR, ROLE_ADMIN], page_size: 1000}, this.accessToken) + .then((usersResponse) => { + if (usersResponse.data) { + this.users = usersResponse.data.results.map((user) => { + return { + title: `${user.first_name} ${user.last_name}`, + value: user.id + } + }); + } + }); + } */ + } + }); // if (this.courseId) { // this.loadCourse().then(()=>{this.updateViewSection(window.location, 'load')}).catch(()=>{ From 4d06d62f06072b8496df30edfc970f2b49c18191 Mon Sep 17 00:00:00 2001 From: gzbender Date: Mon, 23 Jul 2018 15:54:30 +0500 Subject: [PATCH 2/2] =?UTF-8?q?LIL-595=20=D0=A1=D0=BE=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B2=D0=BE=D0=B4=D0=B5=20=D0=BA=D1=83=D1=80=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BD=D0=B0=20=D1=81=D0=B0=D0=B9=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/course/models.py | 19 +++++++++++++++++++ apps/course/views.py | 15 +-------------- project/views.py | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/apps/course/models.py b/apps/course/models.py index b716d53b..bc7717b6 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -1,4 +1,5 @@ import arrow +from random import shuffle from uuid import uuid4 from django.db import models from django.core.exceptions import ValidationError @@ -148,6 +149,24 @@ class Course(BaseModel, DeactivatedMixin): def count_videos_in_lessons(self): return Video.objects.filter(lesson__in=self.lessons.all()).count() + @classmethod + def shuffle(cls, qs, order_is_featured = True): + if order_is_featured: + featured = [] + other = [] + for c in list(qs): + if c.is_featured: + featured.append(c) + else: + other.append(c) + shuffle(featured) + shuffle(other) + return featured + other + else: + all = list(qs) + shuffle(all) + return all + class Category(models.Model): title = models.CharField('Название категории', max_length=100) diff --git a/apps/course/views.py b/apps/course/views.py index 1d961625..5fd8b577 100644 --- a/apps/course/views.py +++ b/apps/course/views.py @@ -1,4 +1,3 @@ -from random import shuffle from paymentwall import Pingback from django.contrib.auth import get_user_model @@ -276,19 +275,7 @@ class CoursesView(ListView): context = super().get_context_data() filtered = CourseFilter(self.request.GET) context.update(filtered.data) - # Иммитация order_by('?'), чтобы можно было использовать пагинацию - # если что, сделать свой QuerySet для Course с методом, который возвращает такой список - course_items = context.get('course_items') - featured = [] - other = [] - for ci in course_items: - if ci.is_featured: - featured.append(ci) - else: - other.append(ci) - shuffle(featured) - shuffle(other) - context['course_items'] = featured + other + context['course_items'] = Course.shuffle(context.get('course_items')) return context def get_template_names(self): diff --git a/project/views.py b/project/views.py index c8400f14..57435b56 100644 --- a/project/views.py +++ b/project/views.py @@ -74,7 +74,7 @@ class IndexView(TemplateView): 'online': online, 'online_coming_soon': online_coming_soon, 'school_schedule': school_schedule, - 'course_items': Course.objects.filter(status=Course.PUBLISHED)[:6], + 'course_items': Course.shuffle(Course.objects.filter(status=Course.PUBLISHED)[:6]), 'is_purchased': school_payment_exists, 'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'], 'school_schedules': SchoolSchedule.objects.all(),