u
This commit is contained in:
parent
f038e97354
commit
4855f8f66c
21 changed files with 199 additions and 158 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -277,3 +277,6 @@ lms/media/
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
.ipython/
|
.ipython/
|
||||||
.env
|
.env
|
||||||
|
|
||||||
|
# Ignore Django migrations
|
||||||
|
*/migrations/
|
||||||
|
|
|
||||||
53
.idx/dev.nix
Normal file
53
.idx/dev.nix
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
# Which nixpkgs channel to use.
|
||||||
|
channel = "stable-24.05"; # or "unstable"
|
||||||
|
|
||||||
|
# Use https://search.nixos.org/packages to find packages
|
||||||
|
packages = [
|
||||||
|
pkgs.docker
|
||||||
|
pkgs.docker-compose
|
||||||
|
];
|
||||||
|
|
||||||
|
# Sets environment variables in the workspace
|
||||||
|
env = {};
|
||||||
|
services.docker.enable = true;
|
||||||
|
|
||||||
|
idx = {
|
||||||
|
# Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
|
||||||
|
extensions = [
|
||||||
|
"ms-azuretools.vscode-docker"
|
||||||
|
];
|
||||||
|
|
||||||
|
workspace = {
|
||||||
|
# Runs when a workspace is first created with this `dev.nix` file
|
||||||
|
onCreate = {
|
||||||
|
setup-docker-compose = ''
|
||||||
|
# Ensure Docker Compose is built only once
|
||||||
|
docker-compose -f docker-compose.local.yml build
|
||||||
|
'';
|
||||||
|
# Open editors for the following files by default, if they exist:
|
||||||
|
default.openFiles = ["docker-compose.local.yml"];
|
||||||
|
};
|
||||||
|
# To run something each time the workspace is (re)started, use the `onStart` hook
|
||||||
|
onStart = {
|
||||||
|
start-docker-compose = ''
|
||||||
|
docker-compose -f docker-compose.local.yml up
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable previews and customize configuration
|
||||||
|
previews = {
|
||||||
|
enable = true;
|
||||||
|
previews = {
|
||||||
|
web = {
|
||||||
|
command = ["docker-compose" "-f" "docker-compose.local.yml" "up"];
|
||||||
|
env = {
|
||||||
|
PORT = "$PORT";
|
||||||
|
};
|
||||||
|
manager = "web";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"IDX.aI.enableInlineCompletion": true,
|
||||||
|
"IDX.aI.enableCodebaseIndexing": true
|
||||||
|
}
|
||||||
|
|
@ -14,11 +14,12 @@ SECRET_KEY = env(
|
||||||
default="DM837WrWz7KIfZM2eb4swzqGlIG0VhhAIFNXf9KgamMtT42DTkHIEXfpF4N9rh2Y",
|
default="DM837WrWz7KIfZM2eb4swzqGlIG0VhhAIFNXf9KgamMtT42DTkHIEXfpF4N9rh2Y",
|
||||||
)
|
)
|
||||||
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
|
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
|
||||||
ALLOWED_HOSTS = ["127.0.0.1", "localhost"] # حدد المضيفين المسموح بهم
|
ALLOWED_HOSTS = ["127.0.0.1", "localhost", "8000-idx-lms-1736949042591.cluster-qtqwjj3wgzff6uxtk26wj7fzq6.cloudworkstations.dev"] # حدد المضيفين المسموح بهم
|
||||||
|
|
||||||
CSRF_TRUSTED_ORIGINS = [
|
CSRF_TRUSTED_ORIGINS = [
|
||||||
'http://localhost:3000',
|
'http://localhost:3000',
|
||||||
'http://127.0.0.1:3000',
|
'http://127.0.0.1:3000',
|
||||||
|
'https://8000-idx-lms-1736949042591.cluster-qtqwjj3wgzff6uxtk26wj7fzq6.cloudworkstations.dev'
|
||||||
]
|
]
|
||||||
CORS_ORIGIN_ALLOW_ALL = True
|
CORS_ORIGIN_ALLOW_ALL = True
|
||||||
CORS_ALLOW_CREDENTIALS = False
|
CORS_ALLOW_CREDENTIALS = False
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-11 07:54
|
# Generated by Django 5.0.10 on 2025-01-15 14:43
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
import uuid
|
import uuid
|
||||||
|
|
@ -21,9 +21,13 @@ class Migration(migrations.Migration):
|
||||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||||
('title', models.CharField(max_length=255, verbose_name='Course Title')),
|
('title', models.CharField(max_length=255, verbose_name='Course Title')),
|
||||||
('description', models.TextField(verbose_name='Course Description')),
|
('description', models.TextField(verbose_name='Course Description')),
|
||||||
|
('image', models.ImageField(null=True, upload_to='courses/image')),
|
||||||
|
('is_paid', models.BooleanField(default=False)),
|
||||||
|
('price', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
|
||||||
|
('rating', models.PositiveSmallIntegerField(blank=True, null=True)),
|
||||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
|
||||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
|
||||||
('instructor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses_taught', to=settings.AUTH_USER_MODEL, verbose_name='Instructor')),
|
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses_taught', to=settings.AUTH_USER_MODEL, verbose_name='Instructor')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
|
|
@ -51,9 +55,9 @@ class Migration(migrations.Migration):
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||||
('title', models.CharField(max_length=255, verbose_name='Module Title')),
|
('title', models.CharField(max_length=255, verbose_name='Module Title')),
|
||||||
('description', models.TextField(verbose_name='Module Description')),
|
('description', models.TextField(null=True, verbose_name='Module Description')),
|
||||||
('order', models.PositiveIntegerField(default=0, unique=True, verbose_name='Order')),
|
|
||||||
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='app.course', verbose_name='Course')),
|
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='app.course', verbose_name='Course')),
|
||||||
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
|
|
@ -61,9 +65,10 @@ class Migration(migrations.Migration):
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||||
('title', models.CharField(max_length=255, verbose_name='Lesson Title')),
|
('title', models.CharField(max_length=255, verbose_name='Lesson Title')),
|
||||||
|
('description', models.TextField(null=True, verbose_name='Lesson Description')),
|
||||||
('content', models.TextField(verbose_name='Lesson Content')),
|
('content', models.TextField(verbose_name='Lesson Content')),
|
||||||
('order', models.PositiveIntegerField(default=0, verbose_name='Order')),
|
|
||||||
('file', models.FileField(blank=True, null=True, upload_to='lesson_files/', verbose_name='Attached File')),
|
('file', models.FileField(blank=True, null=True, upload_to='lesson_files/', verbose_name='Attached File')),
|
||||||
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
|
||||||
('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lessons', to='app.module', verbose_name='Module')),
|
('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lessons', to='app.module', verbose_name='Module')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-12 10:03
|
# Generated by Django 5.0.10 on 2025-01-15 14:47
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
@ -11,8 +11,8 @@ class Migration(migrations.Migration):
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='course',
|
model_name='module',
|
||||||
name='image',
|
name='order',
|
||||||
field=models.ImageField(null=True, upload_to='courses/image'),
|
field=models.IntegerField(blank=True, null=True),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-12 10:16
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0002_course_image'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='course',
|
|
||||||
name='is_paid',
|
|
||||||
field=models.BooleanField(default=False),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='course',
|
|
||||||
name='price',
|
|
||||||
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
17
lms/app/migrations/0003_remove_module_order.py
Normal file
17
lms/app/migrations/0003_remove_module_order.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:48
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0002_module_order'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='module',
|
||||||
|
name='order',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-12 14:39
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0003_course_is_paid_course_price'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='course',
|
|
||||||
name='rating',
|
|
||||||
field=models.PositiveSmallIntegerField(blank=True, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0003_remove_module_order'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='enrollment',
|
||||||
|
name='order',
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='lesson',
|
||||||
|
name='order',
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='quiz',
|
||||||
|
name='order',
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 17:20
|
# Generated by Django 5.0.10 on 2025-01-15 14:52
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
@ -6,16 +6,20 @@ from django.db import migrations
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('app', '0009_lesson_description_alter_module_description'),
|
('app', '0004_enrollment_order_lesson_order_quiz_order'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='enrollment',
|
||||||
|
name='order',
|
||||||
|
),
|
||||||
migrations.RemoveField(
|
migrations.RemoveField(
|
||||||
model_name='lesson',
|
model_name='lesson',
|
||||||
name='order',
|
name='order',
|
||||||
),
|
),
|
||||||
migrations.RemoveField(
|
migrations.RemoveField(
|
||||||
model_name='module',
|
model_name='quiz',
|
||||||
name='order',
|
name='order',
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 08:17
|
|
||||||
|
|
||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0004_course_rating'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='course',
|
|
||||||
old_name='instructor',
|
|
||||||
new_name='owner',
|
|
||||||
),
|
|
||||||
]
|
|
||||||
18
lms/app/migrations/0006_enrollment_order.py
Normal file
18
lms/app/migrations/0006_enrollment_order.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:53
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0005_remove_enrollment_order_remove_lesson_order_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='enrollment',
|
||||||
|
name='order',
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 11:08
|
|
||||||
|
|
||||||
import django.db.models.deletion
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0005_rename_instructor_course_owner'),
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='module',
|
|
||||||
name='created_by',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Created By'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 11:10
|
|
||||||
|
|
||||||
import django.db.models.deletion
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0006_module_created_by'),
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='module',
|
|
||||||
name='created_by',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Created By'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
17
lms/app/migrations/0007_remove_enrollment_order.py
Normal file
17
lms/app/migrations/0007_remove_enrollment_order.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:53
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0006_enrollment_order'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='enrollment',
|
||||||
|
name='order',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 12:12
|
|
||||||
|
|
||||||
import django.db.models.deletion
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0007_alter_module_created_by'),
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='lesson',
|
|
||||||
name='created_by',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Created By'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
18
lms/app/migrations/0008_lesson_order.py
Normal file
18
lms/app/migrations/0008_lesson_order.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:57
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0007_remove_enrollment_order'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='lesson',
|
||||||
|
name='order',
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
# Generated by Django 5.0.10 on 2025-01-14 13:02
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('app', '0008_lesson_created_by'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='lesson',
|
|
||||||
name='description',
|
|
||||||
field=models.TextField(null=True, verbose_name='Lesson Description'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='module',
|
|
||||||
name='description',
|
|
||||||
field=models.TextField(null=True, verbose_name='Module Description'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
17
lms/app/migrations/0009_remove_lesson_order.py
Normal file
17
lms/app/migrations/0009_remove_lesson_order.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 5.0.10 on 2025-01-15 14:57
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('app', '0008_lesson_order'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='lesson',
|
||||||
|
name='order',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -49,6 +49,7 @@ class Lesson(models.Model):
|
||||||
module = models.ForeignKey(Module, on_delete=models.CASCADE, related_name='lessons', verbose_name="Module")
|
module = models.ForeignKey(Module, on_delete=models.CASCADE, related_name='lessons', verbose_name="Module")
|
||||||
file = models.FileField(upload_to='lesson_files/', null=True, blank=True, verbose_name="Attached File")
|
file = models.FileField(upload_to='lesson_files/', null=True, blank=True, verbose_name="Attached File")
|
||||||
created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name="Created By")
|
created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name="Created By")
|
||||||
|
#order = models.IntegerField(null=True, blank=True)
|
||||||
|
|
||||||
def str(self):
|
def str(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue