You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
7.0 KiB
115 lines
7.0 KiB
# Generated by Django 3.2.4 on 2024-11-21 20:46
|
|
|
|
import apps.course.models.course
|
|
import apps.course.models.lesson
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
import filer.fields.image
|
|
import utils.schema
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('account', '0003_auto_20241120_1741'),
|
|
migrations.swappable_dependency(settings.FILER_IMAGE_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='Course',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=255, verbose_name='Course Title')),
|
|
('slug', models.SlugField(allow_unicode=True, unique=True)),
|
|
('video_type', models.CharField(choices=[('video_file', 'Video File'), ('video_link', 'Video Link')], max_length=20, verbose_name='Vedio Type')),
|
|
('video_file', models.FileField(blank=True, null=True, upload_to=apps.course.models.course.course_file_upload_to)),
|
|
('video_link', models.CharField(blank=True, max_length=500, null=True, verbose_name='Video Link')),
|
|
('is_online', models.BooleanField(default=True, verbose_name='Is Online Course')),
|
|
('level', models.CharField(choices=[('beginner', 'Beginner'), ('mid', 'Mid Level'), ('advanced', 'Advanced')], max_length=10, verbose_name='Course Level')),
|
|
('duration', models.PositiveIntegerField(verbose_name='Duration (in hours)')),
|
|
('lessons_count', models.PositiveIntegerField(verbose_name='Number of Lessons')),
|
|
('description', models.TextField(verbose_name='Course Description')),
|
|
('short_description', models.CharField(blank=True, max_length=500, null=True, verbose_name='Short Description')),
|
|
('status', models.CharField(choices=[('inactive', 'Inactive'), ('upcoming', 'Upcoming'), ('registering', 'Registering'), ('ongoing', 'Ongoing'), ('finished', 'Finished')], default='inactive', max_length=15, verbose_name='Course Status')),
|
|
('is_free', models.BooleanField(default=True, verbose_name='Is Free')),
|
|
('price', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Course Price')),
|
|
('discount_percentage', models.PositiveIntegerField(default=0, verbose_name='Discount Percentage')),
|
|
('final_price', models.DecimalField(blank=True, decimal_places=2, default=0.0, help_text='This field is automatically calculated based on the discount percentage.', max_digits=10, verbose_name='Course Final Price')),
|
|
('timing', models.JSONField(blank=True, default=utils.schema.default_timing, help_text='The Timing information in JSON format.', null=True, verbose_name='Timing')),
|
|
('features', models.JSONField(blank=True, default=dict, null=True, verbose_name='Course features')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Course',
|
|
'verbose_name_plural': 'Courses',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='CourseCategory',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=255, verbose_name='Category Name')),
|
|
('slug', models.SlugField(max_length=255, unique=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Lesson',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=255, verbose_name='Lesson Title')),
|
|
('priority', models.IntegerField(blank=True, null=True, verbose_name='Priority')),
|
|
('duration', models.PositiveIntegerField(verbose_name='Duration (in minutes)')),
|
|
('content_type', models.CharField(choices=[('link', 'Link'), ('file', 'File')], max_length=10, verbose_name='Content Type')),
|
|
('content_file', models.FileField(blank=True, null=True, upload_to=apps.course.models.lesson.lesson_file_upload_to)),
|
|
('video_link', models.CharField(blank=True, max_length=500, null=True, verbose_name='Video Link')),
|
|
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lessons', to='course.course', verbose_name='Course')),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Glossary',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=555, verbose_name='Glossary Title')),
|
|
('description', models.TextField(verbose_name='Description')),
|
|
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='glossaries', to='course.course', verbose_name='Course')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Glossary',
|
|
'verbose_name_plural': 'Glossary',
|
|
'ordering': ('-id',),
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='course',
|
|
name='category',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses', to='course.coursecategory', verbose_name='Category'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='course',
|
|
name='professor',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses', to='account.professoruser'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='course',
|
|
name='thumbnail',
|
|
field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.FILER_IMAGE_MODEL, verbose_name='thumbnail'),
|
|
),
|
|
migrations.CreateModel(
|
|
name='Attachment',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=255, verbose_name='Attachment Title')),
|
|
('file', models.FileField(upload_to=apps.course.models.course.attachment_file_upload_to, verbose_name='Attachment File')),
|
|
('file_size', models.PositiveIntegerField(blank=True, null=True, verbose_name='File Size (in bytes)')),
|
|
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='course.course', verbose_name='Course')),
|
|
],
|
|
options={
|
|
'verbose_name': 'Attachment',
|
|
'verbose_name_plural': 'Attachments',
|
|
'ordering': ('-id',),
|
|
},
|
|
),
|
|
]
|