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):
list_display = ('name', 'slug', 'course_count')
list_display = ('name', 'slug', 'icon', 'course_count')
search_fields = ('name',)
list_sections = [CourseTableSection]
fieldsets = (
(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'))
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):
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'
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:
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):
ret = super().to_representation(instance)
@ -80,10 +94,12 @@ def serialize_file(value, serializer):
class AdminCourseCategorySerializer(serializers.ModelSerializer):
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:
model = CourseCategory
fields = ['id', 'name', 'slug']
fields = ['id', 'name', 'name_i18n', 'slug', 'slug_i18n', 'icon']
def to_representation(self, instance):
ret = super().to_representation(instance)
@ -210,9 +226,11 @@ class AdminCourseDetailSerializer(serializers.ModelSerializer):
class AdminCourseChapterSerializer(serializers.ModelSerializer):
title_i18n = serializers.JSONField(source='title', read_only=True)
class Meta:
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']
def to_representation(self, instance):
@ -259,9 +277,11 @@ class AdminCourseLessonSerializer(serializers.Serializer):
'chapter': instance.chapter_id,
'lesson': instance.lesson_id,
'title': localized_title,
'title_i18n': raw_title,
'priority': instance.priority,
'is_active': instance.is_active,
'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,
'video_link': lesson_obj.video_link if lesson_obj else "",
'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 utils import get_thumbs
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.account.serializers import UserProfileSerializer
from decimal import Decimal
@ -38,7 +38,7 @@ class CourseCategorySerializer(serializers.ModelSerializer):
class Meta:
model = CourseCategory
fields = ['id', 'name', 'slug', 'course_count']
fields = ['id', 'name', 'slug', 'icon', 'course_count']
def _lang(self):
request = self.context.get('request')
@ -104,10 +104,10 @@ class CourseListSerializer(serializers.ModelSerializer):
return get_localized_field(self._lang(), obj.slug)
def get_level(self, obj):
return get_localized_field(self._lang(), obj.level)
return normalize_level(obj.level)
def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_short_description(self, obj):
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)
def get_level(self, obj):
return get_localized_field(self._lang(), obj.level)
return normalize_level(obj.level)
def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_description(self, obj):
return get_localized_field(self._lang(), obj.description)
@ -617,7 +617,7 @@ class MyCourseListSerializer(serializers.ModelSerializer):
return get_localized_field(self._lang(), obj.slug)
def get_status(self, obj):
return get_localized_field(self._lang(), obj.status)
return normalize_status(obj.status)
def get_short_description(self, obj):
return get_localized_field(self._lang(), obj.short_description)

Loading…
Cancel
Save