diff --git a/access/migrations/0001_initial.py b/access/migrations/0001_initial.py index 0d274e8..ea354c6 100644 --- a/access/migrations/0001_initial.py +++ b/access/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals import access.models @@ -22,13 +22,12 @@ class Migration(migrations.Migration): ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), - ('first_name', models.CharField(blank=True, default='Guest', max_length=30, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')), - ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), + ('first_name', models.CharField(blank=True, default='Guest', max_length=63, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=63, verbose_name='last name')), + ('date_joined', models.DateTimeField(verbose_name='date joined')), ('is_staff', models.BooleanField(default=False, help_text='Определяет разрешение пользователя на вход в административную часть.', verbose_name='флаг персонала')), ('is_active', models.BooleanField(default=False, help_text='Определяет активен ли пользователь в системе. Снимите флаг, вместо удаления пользователя.', verbose_name='активен')), - ('photo', models.ImageField(blank=True, default='user/photo/default_avatar.png', null=True, upload_to='user/photo/')), - ('phone', models.CharField(blank=True, max_length=15)), + ('is_blocked', models.BooleanField(default=False, help_text='Определяет заблокирован ли пользователь. Поставьте флаг, если знаете, что это нехороший человек.', verbose_name='заблочен')), ], options={ 'verbose_name': 'user', @@ -39,11 +38,19 @@ class Migration(migrations.Migration): ], ), migrations.CreateModel( - name='ActiveObject', + name='Account', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('success', models.BooleanField(default=False, verbose_name='Завершён ли курс')), + ('b_day', models.DateField(blank=True, null=True)), + ('city', models.CharField(blank=True, max_length=63, null=True)), + ('gender', models.SmallIntegerField(choices=[(1, 'male'), (0, 'undefined'), (2, 'female')], default=0)), + ('photo', models.ImageField(blank=True, default='user/photo/default_avatar.png', null=True, upload_to='user/photo/')), + ('phone', models.CharField(blank=True, max_length=15, null=True)), ], + options={ + 'verbose_name': 'Дополнительная информация о пользователе', + 'verbose_name_plural': 'Дополнительная информация о пользователе', + }, ), migrations.CreateModel( name='ExtraPrivilege', @@ -51,5 +58,32 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('is_done', models.BooleanField(default=False, verbose_name='Выполнено?')), ], + options={ + 'verbose_name': 'Доп право', + 'verbose_name_plural': 'Доп права пользователя', + }, + ), + migrations.CreateModel( + name='Invite', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hash', models.CharField(default='NduzOxMZQyaOJIb', max_length=15)), + ('date', models.DateTimeField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Приглошение в систему', + 'verbose_name_plural': 'Приглошения в систему', + }, + ), + migrations.CreateModel( + name='Progress', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('success', models.BooleanField(default=False, verbose_name='Завершён ли курс')), + ], + options={ + 'verbose_name': 'Прогресс пользователя', + 'verbose_name_plural': 'Прогресс пользователя', + }, ), ] diff --git a/access/migrations/0002_auto_20171013_1118.py b/access/migrations/0002_auto_20171017_1606.py similarity index 79% rename from access/migrations/0002_auto_20171013_1118.py rename to access/migrations/0002_auto_20171017_1606.py index beea025..e3b6826 100644 --- a/access/migrations/0002_auto_20171013_1118.py +++ b/access/migrations/0002_auto_20171017_1606.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.conf import settings @@ -12,37 +12,47 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('access', '0001_initial'), ('auth', '0008_alter_user_username_max_length'), ('courses', '0001_initial'), - ('access', '0001_initial'), ] operations = [ migrations.AddField( - model_name='extraprivilege', - name='subject', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Объект'), - ), - migrations.AddField( - model_name='extraprivilege', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Правообладатель'), - ), - migrations.AddField( - model_name='activeobject', + model_name='progress', name='active_obj', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Активный объект'), ), migrations.AddField( - model_name='activeobject', + model_name='progress', name='course', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс'), ), migrations.AddField( - model_name='activeobject', + model_name='progress', name='user', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент'), ), + migrations.AddField( + model_name='invite', + name='owner', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='extraprivilege', + name='subject', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Объект'), + ), + migrations.AddField( + model_name='extraprivilege', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Правообладатель'), + ), + migrations.AddField( + model_name='account', + name='owner', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), migrations.AddField( model_name='user', name='groups', diff --git a/access/migrations/0003_account.py b/access/migrations/0003_account.py deleted file mode 100644 index bee2dfd..0000000 --- a/access/migrations/0003_account.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:56 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0002_auto_20171013_1118'), - ] - - operations = [ - migrations.CreateModel( - name='Account', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('b_day', models.DateTimeField(blank=True, null=True)), - ('city', models.CharField(max_length=63, null=True)), - ('gender', models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0)), - ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/access/migrations/0014_auto_20171017_1450.py b/access/migrations/0003_auto_20171017_1623.py similarity index 65% rename from access/migrations/0014_auto_20171017_1450.py rename to access/migrations/0003_auto_20171017_1623.py index e91489e..bf536d6 100644 --- a/access/migrations/0014_auto_20171017_1450.py +++ b/access/migrations/0003_auto_20171017_1623.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 14:50 +# Generated by Django 1.11.6 on 2017-10-17 16:23 from __future__ import unicode_literals from django.db import migrations, models @@ -8,14 +8,10 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('access', '0013_auto_20171017_0933'), + ('access', '0002_auto_20171017_1606'), ] operations = [ - migrations.RenameModel( - old_name='ActiveObject', - new_name='Progress', - ), migrations.AlterField( model_name='account', name='gender', @@ -24,6 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='invite', name='hash', - field=models.CharField(default='lQNTPwtkiSKGcAk', max_length=15), + field=models.CharField(default='CMrIVEzSAMFLaRx', max_length=15), ), ] diff --git a/access/migrations/0004_auto_20171013_1200.py b/access/migrations/0004_auto_20171018_1022.py similarity index 50% rename from access/migrations/0004_auto_20171013_1200.py rename to access/migrations/0004_auto_20171018_1022.py index 855a539..983de39 100644 --- a/access/migrations/0004_auto_20171013_1200.py +++ b/access/migrations/0004_auto_20171018_1022.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 12:00 +# Generated by Django 1.11.6 on 2017-10-18 10:22 from __future__ import unicode_literals from django.db import migrations, models @@ -8,18 +8,18 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('access', '0003_account'), + ('access', '0003_auto_20171017_1623'), ] operations = [ migrations.AlterField( model_name='account', - name='b_day', - field=models.DateField(blank=True, null=True), + name='gender', + field=models.SmallIntegerField(choices=[(2, 'female'), (0, 'undefined'), (1, 'male')], default=0), ), migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(0, 'undefined'), (1, 'male'), (2, 'female')], default=0), + model_name='invite', + name='hash', + field=models.CharField(default='eyCJRNJduvUlzpu', max_length=15), ), ] diff --git a/access/migrations/0005_auto_20171013_1222.py b/access/migrations/0005_auto_20171013_1222.py deleted file mode 100644 index d1cc937..0000000 --- a/access/migrations/0005_auto_20171013_1222.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 12:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0004_auto_20171013_1200'), - ] - - operations = [ - migrations.RemoveField( - model_name='user', - name='phone', - ), - migrations.RemoveField( - model_name='user', - name='photo', - ), - migrations.AddField( - model_name='account', - name='phone', - field=models.CharField(blank=True, max_length=15), - ), - migrations.AddField( - model_name='account', - name='photo', - field=models.ImageField(blank=True, default='user/photo/default_avatar.png', null=True, upload_to='user/photo/'), - ), - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(1, 'male'), (0, 'undefined'), (2, 'female')], default=0), - ), - ] diff --git a/access/migrations/0008_auto_20171016_1159.py b/access/migrations/0005_auto_20171018_1025.py similarity index 60% rename from access/migrations/0008_auto_20171016_1159.py rename to access/migrations/0005_auto_20171018_1025.py index 024803c..fee73b3 100644 --- a/access/migrations/0008_auto_20171016_1159.py +++ b/access/migrations/0005_auto_20171018_1025.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-16 11:59 +# Generated by Django 1.11.6 on 2017-10-18 10:25 from __future__ import unicode_literals from django.db import migrations, models @@ -8,7 +8,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('access', '0007_auto_20171013_1247'), + ('access', '0004_auto_20171018_1022'), ] operations = [ @@ -20,11 +20,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='invite', name='hash', - field=models.CharField(default='bOpTjVJAphzdwkq', max_length=15), - ), - migrations.AlterField( - model_name='user', - name='last_login', - field=models.DateTimeField(auto_now_add=True, verbose_name='last_login'), + field=models.CharField(default='iaTxuvvpFPbVQPt', max_length=15), ), ] diff --git a/access/migrations/0006_auto_20171013_1242.py b/access/migrations/0006_auto_20171013_1242.py deleted file mode 100644 index 22543db..0000000 --- a/access/migrations/0006_auto_20171013_1242.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 12:42 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0005_auto_20171013_1222'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='is_blocked', - field=models.BooleanField(default=False, help_text='Определяет заблокирован ли пользователь. Поставьте флаг, если знаете, что это нехороший человек.', verbose_name='заблочен'), - ), - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(2, 'female'), (0, 'undefined'), (1, 'male')], default=0), - ), - ] diff --git a/access/migrations/0007_auto_20171013_1247.py b/access/migrations/0007_auto_20171013_1247.py deleted file mode 100644 index 51d0a56..0000000 --- a/access/migrations/0007_auto_20171013_1247.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 12:47 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0006_auto_20171013_1242'), - ] - - operations = [ - migrations.CreateModel( - name='Invite', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('hash', models.CharField(default='ukCbBjPYGTGLOGs', max_length=15)), - ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0), - ), - ] diff --git a/access/migrations/0009_auto_20171016_1634.py b/access/migrations/0009_auto_20171016_1634.py deleted file mode 100644 index 7ae354e..0000000 --- a/access/migrations/0009_auto_20171016_1634.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-16 16:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0008_auto_20171016_1159'), - ] - - operations = [ - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(0, 'undefined'), (2, 'female'), (1, 'male')], default=0), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='vwiZvxTTDrJJUUF', max_length=15), - ), - migrations.AlterField( - model_name='user', - name='last_login', - field=models.DateTimeField(auto_now_add=True, verbose_name='last login'), - ), - ] diff --git a/access/migrations/0010_auto_20171016_1709.py b/access/migrations/0010_auto_20171016_1709.py deleted file mode 100644 index 0533289..0000000 --- a/access/migrations/0010_auto_20171016_1709.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-16 17:09 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0009_auto_20171016_1634'), - ] - - operations = [ - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(1, 'male'), (2, 'female'), (0, 'undefined')], default=0), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='QtrdrGbAnXtRHSL', max_length=15), - ), - migrations.AlterField( - model_name='user', - name='last_login', - field=models.DateTimeField(blank=True, null=True, verbose_name='last login'), - ), - ] diff --git a/access/migrations/0012_auto_20171017_0924.py b/access/migrations/0012_auto_20171017_0924.py deleted file mode 100644 index ee986f4..0000000 --- a/access/migrations/0012_auto_20171017_0924.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 09:24 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0011_auto_20171017_0800'), - ] - - operations = [ - migrations.AddField( - model_name='invite', - name='date', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(0, 'undefined'), (2, 'female'), (1, 'male')], default=0), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='JnNSTfEkoDEclgp', max_length=15), - ), - ] diff --git a/access/migrations/0013_auto_20171017_0933.py b/access/migrations/0013_auto_20171017_0933.py deleted file mode 100644 index 7a59e4d..0000000 --- a/access/migrations/0013_auto_20171017_0933.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 09:33 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0012_auto_20171017_0924'), - ] - - operations = [ - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(0, 'undefined'), (1, 'male'), (2, 'female')], default=0), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='RGmRBoJxBvpmTzm', max_length=15), - ), - migrations.AlterField( - model_name='user', - name='first_name', - field=models.CharField(blank=True, default='Guest', max_length=63, verbose_name='first name'), - ), - migrations.AlterField( - model_name='user', - name='last_name', - field=models.CharField(blank=True, max_length=63, verbose_name='last name'), - ), - ] diff --git a/access/migrations/0015_auto_20171017_1514.py b/access/migrations/0015_auto_20171017_1514.py deleted file mode 100644 index f0d426c..0000000 --- a/access/migrations/0015_auto_20171017_1514.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 15:14 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0014_auto_20171017_1450'), - ] - - operations = [ - migrations.AlterModelOptions( - name='account', - options={'verbose_name': 'Дополнительная информация о пользователе', 'verbose_name_plural': 'Дополнительная информация о пользователе'}, - ), - migrations.AlterModelOptions( - name='extraprivilege', - options={'verbose_name': 'Доп право', 'verbose_name_plural': 'Доп права пользователя'}, - ), - migrations.AlterModelOptions( - name='invite', - options={'verbose_name': 'Приглошение в систему', 'verbose_name_plural': 'Приглошения в систему'}, - ), - migrations.AlterModelOptions( - name='progress', - options={'verbose_name': 'Прогресс пользователя', 'verbose_name_plural': 'Прогресс пользователя'}, - ), - migrations.AlterField( - model_name='account', - name='city', - field=models.CharField(blank=True, max_length=63, null=True), - ), - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0), - ), - migrations.AlterField( - model_name='account', - name='phone', - field=models.CharField(blank=True, max_length=15, null=True), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='EwxzlFyTLohcDNa', max_length=15), - ), - ] diff --git a/courses/admin.py b/courses/admin.py index 00b426e..175c446 100755 --- a/courses/admin.py +++ b/courses/admin.py @@ -1,14 +1,13 @@ from django.contrib import admin from courses.models import Course, Skills, Achievements, SkillJ,\ - CourseMap, Topic, Task, Vertex, Diploma, MaterialDirection, Tutorial + CourseMap, Topic, Task, Vertex, Diploma, Tutorial admin.site.register(CourseMap) admin.site.register(Topic) admin.site.register(Task) admin.site.register(Vertex) admin.site.register(Tutorial) -admin.site.register(MaterialDirection) admin.site.register(Course) admin.site.register(Skills) admin.site.register(Achievements) diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py index e98d6a1..50e1add 100644 --- a/courses/migrations/0001_initial.py +++ b/courses/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.conf import settings @@ -15,7 +15,6 @@ class Migration(migrations.Migration): migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('contenttypes', '0002_remove_content_type_name'), ('storage', '0001_initial'), - ('library', '0002_auto_20171013_1118'), ] operations = [ @@ -23,6 +22,7 @@ class Migration(migrations.Migration): name='Achievements', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('icon', models.ImageField(blank=True, null=True, upload_to='diplomas', verbose_name='Отображение достижения')), ], options={ 'verbose_name': 'Достижение', @@ -36,22 +36,16 @@ class Migration(migrations.Migration): ('hidden', models.BooleanField(default=False, verbose_name='Видно только оплатившим')), ('level', models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень')), ('slug', models.SlugField(blank=True, default='', editable=False, max_length=255, unique=True)), - ('icon', models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Иконка курса')), ('public', models.BooleanField(default=False, verbose_name='Опубликовать')), ('title', models.CharField(max_length=255, verbose_name='Заголовок')), ('description', models.TextField(blank=True, verbose_name='Описание')), ('image', models.ImageField(blank=True, upload_to='course', verbose_name='Изображение')), ('big_image', models.ImageField(blank=True, upload_to='course', verbose_name='Большое изображение')), ('big_mobile_image', models.ImageField(blank=True, help_text='Большая картинка для мобильной версии', null=True, upload_to='course', verbose_name='Под мобилку')), - ('preview', models.CharField(blank=True, default='', max_length=255, verbose_name='Трэйл')), - ('sort', models.IntegerField(default=0, verbose_name='Порядок сортировки')), - ('min_price', models.IntegerField(default=0, verbose_name='Цена от')), - ('buy_icon', models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Картинка покупки')), ], options={ 'verbose_name': 'Курс', 'verbose_name_plural': 'Курсы', - 'ordering': ['sort'], }, ), migrations.CreateModel( @@ -183,21 +177,11 @@ class Migration(migrations.Migration): name='direction', field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.MaterialDirection', verbose_name='Направление'), ), - migrations.AddField( - model_name='course', - name='keywords', - field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Ключевые слова'), - ), migrations.AddField( model_name='course', name='mentors', field=models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), ), - migrations.AddField( - model_name='course', - name='recommend', - field=models.ManyToManyField(blank=True, help_text='Курсы, которые стоит порекомендовать вместе с этим', related_name='_course_recommend_+', to='courses.Course', verbose_name='Связанные курсы'), - ), migrations.AddField( model_name='course', name='teachers', diff --git a/courses/migrations/0004_auto_20171018_1025.py b/courses/migrations/0004_auto_20171018_1025.py new file mode 100644 index 0000000..a12d2e5 --- /dev/null +++ b/courses/migrations/0004_auto_20171018_1025.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-18 10:25 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0003_auto_20171018_1022'), + ] + + operations = [ + migrations.AlterModelOptions( + name='skillj', + options={'verbose_name': 'Размер навыка', 'verbose_name_plural': 'Размеры навыков'}, + ), + migrations.RemoveField( + model_name='skillj', + name='size', + ), + ] diff --git a/courses/models.py b/courses/models.py index b4c450e..c9fd891 100755 --- a/courses/models.py +++ b/courses/models.py @@ -10,20 +10,6 @@ from management.models import Comment from storage.models import Storage -class MaterialDirection(models.Model): - title = models.CharField(verbose_name=u'Заголовок', max_length=255) - color = models.CharField(verbose_name=u'Цвет', max_length=50) - description = models.TextField(verbose_name=u'Описание', blank=True) - mentors = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Кураторы') - - def __str__(self): - return self.title - - class Meta: - verbose_name = u'Направление' - verbose_name_plural = u'Направления' - - class Course(models.Model): COURSE_LEVEL = ( ('B', u'Базовый'), @@ -31,10 +17,16 @@ class Course(models.Model): ('E', u'Экспертный'), ('B+A', u'Базовый + Продвинутый') ) + COURSE_DIRECTION = ( + (3, 'Бизнес'), + (2, 'Веб-дизайн'), + (1, 'Разработка'), + (4, 'Рисование') + ) hidden = models.BooleanField(verbose_name=u'Видно только оплатившим', default=False) level = models.CharField(verbose_name=u'Уровень', choices=COURSE_LEVEL, default='B', max_length=3) slug = models.SlugField(max_length=255, editable=False, blank=True, default='', unique=True) - direction = models.ForeignKey(MaterialDirection, verbose_name=u'Направление', null=True) + direction = models.SmallIntegerField(choices=COURSE_DIRECTION, verbose_name=u'Направление', null=True) mentors = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Кураторы', blank=True, related_name='course_mentors') public = models.BooleanField(verbose_name=u'Опубликовать', default=False) @@ -63,7 +55,7 @@ class Course(models.Model): if type([]) == type(i): acc[-1]['children'] = helper(i) else: - acc.append(serializer(Vertex.manager.get(id=i)).data) + acc.append(serializer(Vertex.objects.get(id=i)).data) return acc return helper(course_map) @@ -83,7 +75,6 @@ class Course(models.Model): class Meta: verbose_name = u"Курс" verbose_name_plural = u"Курсы" - ordering = ['sort'] class Skills(models.Model): @@ -102,14 +93,12 @@ class Skills(models.Model): class SkillJ(models.Model): skill = models.ForeignKey(to="Skills", verbose_name=u'Навык') lesson = models.ForeignKey(to="Vertex", verbose_name=u'Урок') - size = models.IntegerField(verbose_name=u'Размер', default=0) def __str__(self): return '%s %s' % (self.skill, self.size) class Meta: verbose_name = u'Размер навыка' verbose_name_plural = u'Размеры навыков' - ordering = ['id'] class Achievements(models.Model): diff --git a/courses/urls.py b/courses/urls.py index d9784ee..8f3b171 100644 --- a/courses/urls.py +++ b/courses/urls.py @@ -5,6 +5,5 @@ urlpatterns = [ url(r'detail/([0-9]{1,99})/$', views.CourseDetailView.as_view()), url(r'vertex/([0-9]{1,99})/$', views.VertexDetail.as_view()), url(r'tree/(?P[-\w]+)/$', views.TreeView.as_view()), - url(r'directions/$', views.DirectionListView.as_view()), url(r'^$', views.CourseListView.as_view()), ] \ No newline at end of file diff --git a/courses/views.py b/courses/views.py index 6311ef3..2cc36bf 100644 --- a/courses/views.py +++ b/courses/views.py @@ -3,20 +3,12 @@ from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from access.serializers import ExtraPrivilegeSerializer -from courses.models import Course, MaterialDirection, Vertex +from courses.models import Course, Vertex from access.models import Progress, ExtraPrivilege from courses.serializers import CourseDetailSerializer, CourseListSerializer, VertexSerializer, CourseTreeSerializer from finance.models import Bill -class DirectionListView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, _request): - return Response([direction.title for direction in MaterialDirection.objects.all()], self.status_code) - - class TreeView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 diff --git a/csv/load_courses.py b/csv/load_courses.py new file mode 100644 index 0000000..4dd9bfe --- /dev/null +++ b/csv/load_courses.py @@ -0,0 +1,24 @@ +import os, sys, django, csv + +sys.path.append("../") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") +django.setup() + +from courses.models import Course + +if __name__ == '__main__': + with open('./course/course.csv') as user_csv: + user_reader = csv.DictReader(user_csv) + for row in user_reader: + row = dict(row) + teachers = row.pop('teachers', None).split("[")[1].split("]")[0].split(", ") + mentors = row.pop('mentors', None).split("[")[1].split("]")[0].split(", ") + course, _is_create = Course.objects.get_or_create(**row) + + for teacher in teachers: + if teacher: + course.teachers.add(teacher) + + for mentor in mentors: + if mentor: + course.mentors.add(mentor) diff --git a/access/load_users.py b/csv/load_users.py similarity index 92% rename from access/load_users.py rename to csv/load_users.py index f779d35..7ad84dc 100644 --- a/access/load_users.py +++ b/csv/load_users.py @@ -8,7 +8,7 @@ from django.contrib.auth import get_user_model from access.models import Account if __name__ == '__main__': - with open('../csv/access/users.csv') as user_csv: + with open('./access/users.csv') as user_csv: user_reader = csv.DictReader(user_csv) for row in user_reader: try: @@ -25,7 +25,7 @@ if __name__ == '__main__': else: raise e - with open('../csv/access/account.csv') as account_csv: + with open('./access/account.csv') as account_csv: account_reader = csv.DictReader(account_csv) for row in account_reader: row = dict(row) diff --git a/finance/migrations/0001_initial.py b/finance/migrations/0001_initial.py index cce6eb6..551ddc3 100644 --- a/finance/migrations/0001_initial.py +++ b/finance/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.conf import settings diff --git a/journals/migrations/0001_initial.py b/journals/migrations/0001_initial.py index b4b94c8..c49c00a 100644 --- a/journals/migrations/0001_initial.py +++ b/journals/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.conf import settings diff --git a/library/migrations/0001_initial.py b/library/migrations/0001_initial.py index 453f3c7..e9723cd 100644 --- a/library/migrations/0001_initial.py +++ b/library/migrations/0001_initial.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-12 16:50 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals import datetime from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -33,9 +34,9 @@ class Migration(migrations.Migration): ('all_views', models.IntegerField(blank=True, default=0, verbose_name='Всего просмотров')), ], options={ - 'ordering': ['-date'], - 'verbose_name_plural': 'Статьи', 'verbose_name': 'Статья', + 'verbose_name_plural': 'Статьи', + 'ordering': ['-date'], }, ), migrations.CreateModel( @@ -45,8 +46,8 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=255, verbose_name='Раздел')), ], options={ - 'verbose_name_plural': 'Разделы статей', 'verbose_name': 'Раздел статьи', + 'verbose_name_plural': 'Разделы статей', }, ), migrations.CreateModel( @@ -56,8 +57,18 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=255, verbose_name='Теги')), ], options={ - 'verbose_name_plural': 'Теги', 'verbose_name': 'Тег', + 'verbose_name_plural': 'Теги', }, ), + migrations.AddField( + model_name='article', + name='section', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='library.ArticleSection', verbose_name='Раздел'), + ), + migrations.AddField( + model_name='article', + name='tags', + field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Теги'), + ), ] diff --git a/library/migrations/0002_auto_20171013_1118.py b/library/migrations/0002_auto_20171013_1118.py deleted file mode 100644 index 00dcc15..0000000 --- a/library/migrations/0002_auto_20171013_1118.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='section', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='library.ArticleSection', verbose_name='Раздел'), - ), - migrations.AddField( - model_name='article', - name='tags', - field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Теги'), - ), - ] diff --git a/management/migrations/0001_initial.py b/management/migrations/0001_initial.py index 33794db..ca39860 100644 --- a/management/migrations/0001_initial.py +++ b/management/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.conf import settings @@ -28,11 +28,25 @@ class Migration(migrations.Migration): ('children', models.ManyToManyField(blank=True, to='management.Comment')), ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), ('files', models.ManyToManyField(blank=True, editable=False, to='storage.Storage', verbose_name='Прикрепленые файлы')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comment_owner', to=settings.AUTH_USER_MODEL, verbose_name='Автор')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Автор')), ], options={ 'verbose_name': 'Комментарий', 'verbose_name_plural': 'Комментарии', }, ), + migrations.CreateModel( + name='Like', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_positive', models.BooleanField(default=True)), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Автор')), + ], + options={ + 'verbose_name': 'Лайк-дизлайк', + 'verbose_name_plural': 'Лайки-дизлайки', + }, + ), ] diff --git a/service/migrations/0001_initial.py b/service/migrations/0001_initial.py index b6ccdf2..1f66785 100644 --- a/service/migrations/0001_initial.py +++ b/service/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals import datetime diff --git a/storage/migrations/0001_initial.py b/storage/migrations/0001_initial.py index 9c5d023..a561228 100644 --- a/storage/migrations/0001_initial.py +++ b/storage/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-13 11:18 +# Generated by Django 1.11.6 on 2017-10-17 16:06 from __future__ import unicode_literals from django.db import migrations, models