Browse Source

course category icon added and course values normalized

master
Mohsen Taba 1 month ago
parent
commit
4750f9db92
  1. 4
      apps/course/admin/course.py
  2. 16
      apps/course/migrations/0011_coursecategory_icon.py
  3. 1
      apps/course/models/course.py
  4. 26
      apps/course/serializers/admin.py
  5. 14
      apps/course/serializers/course.py

4
apps/course/admin/course.py

@ -55,12 +55,12 @@ class CourseTableSection(TableSection):
class CourseCategoryAdmin(ModelAdmin): class CourseCategoryAdmin(ModelAdmin):
list_display = ('name', 'slug', 'course_count')
list_display = ('name', 'slug', 'icon', 'course_count')
search_fields = ('name',) search_fields = ('name',)
list_sections = [CourseTableSection] list_sections = [CourseTableSection]
fieldsets = ( fieldsets = (
(None, { (None, {
'fields': ('name', 'slug')
'fields': ('name', 'slug', 'icon')
}), }),
) )

16
apps/course/migrations/0011_coursecategory_icon.py

@ -0,0 +1,16 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("course", "0010_course_rub_prices"),
]
operations = [
migrations.AddField(
model_name="coursecategory",
name="icon",
field=models.URLField(blank=True, null=True, verbose_name="Icon URL"),
),
]

1
apps/course/models/course.py

@ -94,6 +94,7 @@ class CourseCategory(models.Model):
name = models.JSONField(default=list, null=False, blank=False, verbose_name=_('Category Name')) name = models.JSONField(default=list, null=False, blank=False, verbose_name=_('Category Name'))
slug = models.JSONField(default=list, null=True, blank=True, verbose_name=_('Slug')) slug = models.JSONField(default=list, null=True, blank=True, verbose_name=_('Slug'))
icon = models.URLField(null=True, blank=True, verbose_name=_('Icon URL'))
def __str__(self): def __str__(self):
return extract_text_from_json(self.name) return extract_text_from_json(self.name)

26
apps/course/serializers/admin.py

@ -37,9 +37,23 @@ def get_request_lang(serializer_instance):
return 'en' return 'en'
class AdminLessonSerializer(serializers.ModelSerializer): class AdminLessonSerializer(serializers.ModelSerializer):
title_i18n = serializers.JSONField(source='title', read_only=True)
content_type_i18n = serializers.JSONField(source='content_type', read_only=True)
class Meta: class Meta:
model = Lesson model = Lesson
fields = '__all__'
fields = [
'id',
'title',
'title_i18n',
'content_type',
'content_type_i18n',
'content_file',
'video_link',
'duration',
'created_at',
'updated_at',
]
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
@ -80,10 +94,12 @@ def serialize_file(value, serializer):
class AdminCourseCategorySerializer(serializers.ModelSerializer): class AdminCourseCategorySerializer(serializers.ModelSerializer):
slug = serializers.JSONField(required=False, allow_null=True) slug = serializers.JSONField(required=False, allow_null=True)
name_i18n = serializers.JSONField(source='name', read_only=True)
slug_i18n = serializers.JSONField(source='slug', read_only=True)
class Meta: class Meta:
model = CourseCategory model = CourseCategory
fields = ['id', 'name', 'slug']
fields = ['id', 'name', 'name_i18n', 'slug', 'slug_i18n', 'icon']
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
@ -210,9 +226,11 @@ class AdminCourseDetailSerializer(serializers.ModelSerializer):
class AdminCourseChapterSerializer(serializers.ModelSerializer): class AdminCourseChapterSerializer(serializers.ModelSerializer):
title_i18n = serializers.JSONField(source='title', read_only=True)
class Meta: class Meta:
model = CourseChapter model = CourseChapter
fields = ['id', 'course', 'title', 'priority', 'is_active', 'created_at']
fields = ['id', 'course', 'title', 'title_i18n', 'priority', 'is_active', 'created_at']
read_only_fields = ['id', 'created_at'] read_only_fields = ['id', 'created_at']
def to_representation(self, instance): def to_representation(self, instance):
@ -259,9 +277,11 @@ class AdminCourseLessonSerializer(serializers.Serializer):
'chapter': instance.chapter_id, 'chapter': instance.chapter_id,
'lesson': instance.lesson_id, 'lesson': instance.lesson_id,
'title': localized_title, 'title': localized_title,
'title_i18n': raw_title,
'priority': instance.priority, 'priority': instance.priority,
'is_active': instance.is_active, 'is_active': instance.is_active,
'content_type': localized_content_type, 'content_type': localized_content_type,
'content_type_i18n': raw_content_type,
'content_file': serialize_file(lesson_obj.content_file, self) if lesson_obj and lesson_obj.content_file else None, 'content_file': serialize_file(lesson_obj.content_file, self) if lesson_obj and lesson_obj.content_file else None,
'video_link': lesson_obj.video_link if lesson_obj else "", 'video_link': lesson_obj.video_link if lesson_obj else "",
'duration': lesson_obj.duration if lesson_obj else 0, 'duration': lesson_obj.duration if lesson_obj else 0,

14
apps/course/serializers/course.py

@ -2,7 +2,7 @@ from rest_framework import serializers
# from dj_filer.admin import get_thumbs # from dj_filer.admin import get_thumbs
from utils import get_thumbs from utils import get_thumbs
from apps.course.models import Course, CourseCategory, Attachment, Glossary, LessonCompletion, Participant, Lesson, CourseAttachment, CourseGlossary, CourseLesson from apps.course.models import Course, CourseCategory, Attachment, Glossary, LessonCompletion, Participant, Lesson, CourseAttachment, CourseGlossary, CourseLesson
from apps.course.models.course import get_localized_field
from apps.course.models.course import get_localized_field, normalize_level, normalize_status
from apps.chat.models import RoomMessage from apps.chat.models import RoomMessage
from apps.account.serializers import UserProfileSerializer from apps.account.serializers import UserProfileSerializer
from decimal import Decimal from decimal import Decimal
@ -38,7 +38,7 @@ class CourseCategorySerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = CourseCategory model = CourseCategory
fields = ['id', 'name', 'slug', 'course_count']
fields = ['id', 'name', 'slug', 'icon', 'course_count']
def _lang(self): def _lang(self):
request = self.context.get('request') request = self.context.get('request')
@ -104,10 +104,10 @@ class CourseListSerializer(serializers.ModelSerializer):
return get_localized_field(self._lang(), obj.slug) return get_localized_field(self._lang(), obj.slug)
def get_level(self, obj): def get_level(self, obj):
return get_localized_field(self._lang(), obj.level)
return normalize_level(obj.level)
def get_status(self, obj): def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_short_description(self, obj): def get_short_description(self, obj):
return get_localized_field(self._lang(), obj.short_description) return get_localized_field(self._lang(), obj.short_description)
@ -450,10 +450,10 @@ class CourseDetailSerializer(serializers.ModelSerializer):
return get_localized_field(self._lang(), obj.slug) return get_localized_field(self._lang(), obj.slug)
def get_level(self, obj): def get_level(self, obj):
return get_localized_field(self._lang(), obj.level)
return normalize_level(obj.level)
def get_status(self, obj): def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_description(self, obj): def get_description(self, obj):
return get_localized_field(self._lang(), obj.description) return get_localized_field(self._lang(), obj.description)
@ -617,7 +617,7 @@ class MyCourseListSerializer(serializers.ModelSerializer):
return get_localized_field(self._lang(), obj.slug) return get_localized_field(self._lang(), obj.slug)
def get_status(self, obj): def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_short_description(self, obj): def get_short_description(self, obj):
return get_localized_field(self._lang(), obj.short_description) return get_localized_field(self._lang(), obj.short_description)

Loading…
Cancel
Save