Browse Source
multilanguage setup for course app added , old values set to the language map schema as default english values .
master
multilanguage setup for course app added , old values set to the language map schema as default english values .
master
14 changed files with 594 additions and 103 deletions
-
2apps/course/admin/course.py
-
24apps/course/admin/lesson.py
-
247apps/course/migrations/0008_remove_course_course_cour_status_57ffd9_idx_and_more.py
-
130apps/course/models/course.py
-
28apps/course/models/lesson.py
-
31apps/course/serializers/admin.py
-
128apps/course/serializers/course.py
-
35apps/course/serializers/lesson.py
-
11apps/course/signals.py
-
6apps/course/views/admin.py
-
38apps/course/views/course.py
-
4apps/course/views/lesson.py
-
6apps/course/views/live_session.py
-
5apps/course/views/participant.py
@ -0,0 +1,247 @@ |
|||
# Generated by Django 5.2.12 on 2026-06-03 15:30 |
|||
|
|||
import json |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
def convert_to_json_format(apps, schema_editor): |
|||
Attachment = apps.get_model('course', 'Attachment') |
|||
Course = apps.get_model('course', 'Course') |
|||
CourseCategory = apps.get_model('course', 'CourseCategory') |
|||
CourseChapter = apps.get_model('course', 'CourseChapter') |
|||
CourseLesson = apps.get_model('course', 'CourseLesson') |
|||
Glossary = apps.get_model('course', 'Glossary') |
|||
Lesson = apps.get_model('course', 'Lesson') |
|||
|
|||
def wrap_val(val): |
|||
if not val: |
|||
return "[]" |
|||
if isinstance(val, str): |
|||
stripped = val.strip() |
|||
if stripped.startswith('[') and stripped.endswith(']'): |
|||
try: |
|||
# Already JSON |
|||
json.loads(val) |
|||
return val |
|||
except Exception: |
|||
pass |
|||
# Wrap as JSON string |
|||
return json.dumps([{"title": val, "language_code": "en"}], ensure_ascii=False) |
|||
return json.dumps([{"title": str(val), "language_code": "en"}], ensure_ascii=False) |
|||
|
|||
# 1. Attachment |
|||
for obj in Attachment.objects.all(): |
|||
obj.title = wrap_val(obj.title) |
|||
obj.save() |
|||
|
|||
# 2. Course |
|||
for obj in Course.objects.all(): |
|||
obj.title = wrap_val(obj.title) |
|||
obj.slug = wrap_val(obj.slug) |
|||
obj.level = wrap_val(obj.level) |
|||
obj.status = wrap_val(obj.status) |
|||
obj.timing = wrap_val(obj.timing) |
|||
obj.features = wrap_val(obj.features) |
|||
obj.save() |
|||
|
|||
# 3. CourseCategory |
|||
for obj in CourseCategory.objects.all(): |
|||
obj.name = wrap_val(obj.name) |
|||
obj.slug = wrap_val(obj.slug) |
|||
obj.save() |
|||
|
|||
# 4. CourseChapter |
|||
for obj in CourseChapter.objects.all(): |
|||
obj.title = wrap_val(obj.title) |
|||
obj.save() |
|||
|
|||
# 5. CourseLesson |
|||
for obj in CourseLesson.objects.all(): |
|||
obj.title = wrap_val(obj.title) |
|||
obj.save() |
|||
|
|||
# 6. Glossary |
|||
for obj in Glossary.objects.all(): |
|||
obj.description = wrap_val(obj.description) |
|||
obj.save() |
|||
|
|||
# 7. Lesson |
|||
for obj in Lesson.objects.all(): |
|||
obj.title = wrap_val(obj.title) |
|||
obj.content_type = wrap_val(obj.content_type) |
|||
obj.save() |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('course', '0007_coursechapter_alter_courselesson_options_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
# Remove indexes |
|||
migrations.RemoveIndex( |
|||
model_name='course', |
|||
name='course_cour_status_57ffd9_idx', |
|||
), |
|||
migrations.RemoveIndex( |
|||
model_name='course', |
|||
name='course_cour_slug_235a66_idx', |
|||
), |
|||
migrations.RemoveIndex( |
|||
model_name='course', |
|||
name='course_cour_status_bfcd24_idx', |
|||
), |
|||
migrations.RemoveIndex( |
|||
model_name='course', |
|||
name='course_cour_categor_26bb4d_idx', |
|||
), |
|||
migrations.RemoveIndex( |
|||
model_name='course', |
|||
name='course_cour_profess_5eae9a_idx', |
|||
), |
|||
migrations.RemoveIndex( |
|||
model_name='lesson', |
|||
name='course_less_content_e1cf57_idx', |
|||
), |
|||
|
|||
# Phase 1: Temporary convert columns to TextField to lift length limits |
|||
migrations.AlterField( |
|||
model_name='attachment', |
|||
name='title', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='title', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='slug', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='level', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='status', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursecategory', |
|||
name='name', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursecategory', |
|||
name='slug', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursechapter', |
|||
name='title', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='courselesson', |
|||
name='title', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='glossary', |
|||
name='description', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lesson', |
|||
name='content_type', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lesson', |
|||
name='title', |
|||
field=models.TextField(blank=True, null=True), |
|||
), |
|||
|
|||
# Phase 2: Run Python conversion logic to format as JSON strings |
|||
migrations.RunPython( |
|||
convert_to_json_format, |
|||
reverse_code=migrations.RunPython.noop |
|||
), |
|||
|
|||
# Phase 3: Final conversion to JSONField database columns |
|||
migrations.AlterField( |
|||
model_name='attachment', |
|||
name='title', |
|||
field=models.JSONField(default=list, verbose_name='Attachment Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='features', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Course features'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='level', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Course Level'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='slug', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Slug'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='status', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Course Status'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='timing', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Timing'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='course', |
|||
name='title', |
|||
field=models.JSONField(default=list, verbose_name='Course Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursecategory', |
|||
name='name', |
|||
field=models.JSONField(default=list, verbose_name='Category Name'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursecategory', |
|||
name='slug', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Slug'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='coursechapter', |
|||
name='title', |
|||
field=models.JSONField(default=list, verbose_name='Chapter Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='courselesson', |
|||
name='title', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Sub-lesson Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='glossary', |
|||
name='description', |
|||
field=models.JSONField(default=list, verbose_name='Description'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lesson', |
|||
name='content_type', |
|||
field=models.JSONField(default=list, verbose_name='Content Type'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lesson', |
|||
name='title', |
|||
field=models.JSONField(default=list, verbose_name='Lesson Title'), |
|||
), |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue