diff --git a/access/migrations/0001_initial.py b/access/migrations/0001_initial.py index ea354c6..1f20885 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals import access.models @@ -43,7 +43,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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)), + ('gender', models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], 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)), ], @@ -67,7 +67,7 @@ class Migration(migrations.Migration): 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)), + ('hash', models.CharField(max_length=15)), ('date', models.DateTimeField(blank=True, null=True)), ], options={ diff --git a/access/migrations/0002_auto_20171017_1606.py b/access/migrations/0002_auto_20171018_1437.py similarity index 98% rename from access/migrations/0002_auto_20171017_1606.py rename to access/migrations/0002_auto_20171018_1437.py index e3b6826..0dde273 100644 --- a/access/migrations/0002_auto_20171017_1606.py +++ b/access/migrations/0002_auto_20171018_1437.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.conf import settings @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('courses', '0001_initial'), ('access', '0001_initial'), ('auth', '0008_alter_user_username_max_length'), - ('courses', '0001_initial'), ] operations = [ diff --git a/access/migrations/0003_auto_20171017_1623.py b/access/migrations/0003_auto_20171017_1623.py deleted file mode 100644 index bf536d6..0000000 --- a/access/migrations/0003_auto_20171017_1623.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 16:23 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0002_auto_20171017_1606'), - ] - - 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='CMrIVEzSAMFLaRx', max_length=15), - ), - ] diff --git a/access/migrations/0004_auto_20171018_1022.py b/access/migrations/0004_auto_20171018_1022.py deleted file mode 100644 index 983de39..0000000 --- a/access/migrations/0004_auto_20171018_1022.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-18 10:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0003_auto_20171017_1623'), - ] - - operations = [ - migrations.AlterField( - model_name='account', - name='gender', - field=models.SmallIntegerField(choices=[(2, 'female'), (0, 'undefined'), (1, 'male')], default=0), - ), - migrations.AlterField( - model_name='invite', - name='hash', - field=models.CharField(default='eyCJRNJduvUlzpu', max_length=15), - ), - ] diff --git a/access/migrations/0005_auto_20171018_1025.py b/access/migrations/0005_auto_20171018_1025.py deleted file mode 100644 index fee73b3..0000000 --- a/access/migrations/0005_auto_20171018_1025.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- 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, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0004_auto_20171018_1022'), - ] - - 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='iaTxuvvpFPbVQPt', max_length=15), - ), - ] diff --git a/access/models.py b/access/models.py index 0dc16c4..8f7966d 100755 --- a/access/models.py +++ b/access/models.py @@ -17,9 +17,7 @@ from lms.global_decorators import transaction_decorator class Invite(models.Model): owner = models.OneToOneField(to=settings.AUTH_USER_MODEL) - hash = models.CharField( - max_length=15, default=''.join(random.choice(string.ascii_letters) for x in range(15)) - ) + hash = models.CharField(max_length=15) date = models.DateTimeField(null=True, blank=True) class Meta: @@ -43,7 +41,6 @@ class Account(models.Model): def __str__(self): return self.owner.email - class Meta: verbose_name = 'Дополнительная информация о пользователе' verbose_name_plural = 'Дополнительная информация о пользователе' @@ -101,7 +98,7 @@ class CustomUserManager(BaseUserManager): if is_send: pass - Invite.objects.create(owner=user) + Invite.objects.create(owner=user, hash=''.join(random.choice(string.ascii_letters) for x in range(15))) # Должна идти отбивка return user diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py index 50e1add..fe95121 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.conf import settings @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('contenttypes', '0002_remove_content_type_name'), ('storage', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -36,12 +36,15 @@ 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)), + ('direction', models.SmallIntegerField(choices=[(3, 'Бизнес'), (2, 'Веб-дизайн'), (1, 'Разработка'), (4, 'Рисование')], null=True, 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='Под мобилку')), + ('mentors', models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы')), + ('teachers', models.ManyToManyField(related_name='course_teachers', to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели')), ], options={ 'verbose_name': 'Курс', @@ -70,30 +73,14 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Дипломы', }, ), - migrations.CreateModel( - name='MaterialDirection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Заголовок')), - ('color', models.CharField(max_length=50, verbose_name='Цвет')), - ('description', models.TextField(blank=True, verbose_name='Описание')), - ('mentors', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Кураторы')), - ], - options={ - 'verbose_name': 'Направление', - 'verbose_name_plural': 'Направления', - }, - ), migrations.CreateModel( name='SkillJ', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('size', models.IntegerField(default=0, verbose_name='Размер')), ], options={ 'verbose_name': 'Размер навыка', 'verbose_name_plural': 'Размеры навыков', - 'ordering': ['id'], }, ), migrations.CreateModel( @@ -110,57 +97,42 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Навыки', }, ), - migrations.CreateModel( - name='Vertex', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Название')), - ('free', models.BooleanField(default=True, verbose_name='Привилегии для узла не будут проверяться')), - ('description', models.TextField(blank=True, default='', null=True, verbose_name='Описание')), - ('object_id', models.PositiveIntegerField()), - ], - ), migrations.CreateModel( name='Task', fields=[ - ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('is_exam', models.BooleanField(default=False, verbose_name='Экзамен или домашка')), ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы для домашней работы')), ], - bases=('courses.vertex',), ), migrations.CreateModel( name='Topic', fields=[ - ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), - ('icon', models.ImageField(blank=True, null=True, upload_to='CourseTheme', verbose_name='Иконка темы')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('icon', models.ImageField(blank=True, null=True, upload_to='', verbose_name='Иконка темы')), ], - bases=('courses.vertex',), ), migrations.CreateModel( name='Tutorial', fields=[ - ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('on_comment', models.BooleanField(default=True, verbose_name='Комментарии')), ('video', models.TextField(blank=True, default='', verbose_name='Код видео')), ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы урока')), ], - bases=('courses.vertex',), ), - migrations.AddField( - model_name='vertex', - name='children', - field=models.ManyToManyField(blank=True, to='courses.Vertex'), - ), - migrations.AddField( - model_name='vertex', - name='content_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), - ), - migrations.AddField( - model_name='vertex', - name='course', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), + migrations.CreateModel( + name='Vertex', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Название')), + ('free', models.BooleanField(default=True, verbose_name='Привилегии для узла не будут проверяться')), + ('description', models.TextField(blank=True, default='', null=True, verbose_name='Описание')), + ('object_id', models.PositiveIntegerField()), + ('children', models.ManyToManyField(blank=True, to='courses.Vertex')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course')), + ], ), migrations.AddField( model_name='skillj', @@ -172,21 +144,6 @@ class Migration(migrations.Migration): name='skill', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Skills', verbose_name='Навык'), ), - migrations.AddField( - model_name='course', - 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='mentors', - field=models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - migrations.AddField( - model_name='course', - name='teachers', - field=models.ManyToManyField(related_name='course_teachers', to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), - ), migrations.AddField( model_name='achievements', name='course', diff --git a/courses/migrations/0004_auto_20171018_1025.py b/courses/migrations/0004_auto_20171018_1025.py deleted file mode 100644 index a12d2e5..0000000 --- a/courses/migrations/0004_auto_20171018_1025.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- 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 c9fd891..b21831f 100755 --- a/courses/models.py +++ b/courses/models.py @@ -5,6 +5,7 @@ from django.contrib.contenttypes.models import ContentType from django.db import models import json +from lms.global_decorators import transaction_decorator from library.models import Tags from management.models import Comment from storage.models import Storage @@ -94,7 +95,7 @@ class SkillJ(models.Model): skill = models.ForeignKey(to="Skills", verbose_name=u'Навык') lesson = models.ForeignKey(to="Vertex", verbose_name=u'Урок') - def __str__(self): return '%s %s' % (self.skill, self.size) + def __str__(self): return '%s' % self.skill class Meta: verbose_name = u'Размер навыка' @@ -130,20 +131,34 @@ class Diploma(models.Model): class VertexManager(models.Manager): # Менеджер вершин графа. - def create_with_dependencies(self, model, course, old_id, title, description, - free=True, materials=None, **kwargs): + @transaction_decorator + def create_with_dependencies(self, model, course, title, description, extra_data=None, + free=True, materials=None, parents=None, children=None): + + extra_data = json.loads(extra_data) + content_type = ContentType.objects.get(app_label='courses', model=model) - obj, _is_create = content_type.model_class().objects.update_or_create(**kwargs) + obj = content_type.model_class().objects.create(**extra_data) + [obj.materials.add(i) for i in materials] if materials else None - res, _is_create = self.update_or_create( + + res = self.create( content_type=content_type, object_id=obj.id, course=course, title=title, description=description, free=free, - old_id=old_id, ) + + if children: + for child in children: + res.children.add(child) + + if parents: + for parent in parents: + parent.children.add(res) + return res @@ -179,7 +194,7 @@ class Vertex(models.Model): # Модели нового API со временем всё, что выше будет выпилено -class Tutorial(Vertex): +class Tutorial(models.Model): """ Модель урока. Урок может быть открыт для комментирования и закрыт, по дефолту открыт, @@ -196,7 +211,7 @@ class Tutorial(Vertex): materials = models.ManyToManyField(Storage, verbose_name=u'Материалы урока', blank=True) -class Task(Vertex): +class Task(models.Model): """ Модель таска. Исторически сложилось, что на сервере хостятся два типа тасков отличающихся лишь наименованием @@ -209,13 +224,13 @@ class Task(Vertex): is_exam = models.BooleanField(default=False, verbose_name=u'Экзамен или домашка') -class Topic(Vertex): +class Topic(models.Model): """ Модель темы, нужно просто для объединения тасков и уроков. У некоторых тем есть иконка. Возможно поле icon перекачует в Vertex, а данная модель отвалится за ненадобностью """ - icon = models.ImageField(verbose_name=u'Иконка темы', upload_to='CourseTheme', null=True, blank=True) + icon = models.ImageField(verbose_name=u'Иконка темы', null=True, blank=True) class CourseMap(models.Model): diff --git a/csv/load_courses.py b/csv/load_courses.py index 4dd9bfe..a16e664 100644 --- a/csv/load_courses.py +++ b/csv/load_courses.py @@ -1,10 +1,12 @@ import os, sys, django, csv +from django.db import IntegrityError + sys.path.append("../") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") django.setup() -from courses.models import Course +from courses.models import Course, Vertex if __name__ == '__main__': with open('./course/course.csv') as user_csv: @@ -15,10 +17,23 @@ if __name__ == '__main__': 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) + try: + for teacher in teachers: + if teacher: + course.teachers.add(teacher) + + for mentor in mentors: + if mentor: + course.mentors.add(mentor) + except IntegrityError: + pass - for mentor in mentors: - if mentor: - course.mentors.add(mentor) + with open('./course/vertex.csv') as vertex_csv: + vertex_reader = csv.DictReader(vertex_csv) + for row in vertex_reader: + row = dict(row) + model = row.pop('type', None) + parent = row.pop('parent', None) + course = Course.objects.get(id=row.pop('course', None)) + parents = [parent] if parent else [] + Vertex.objects.create_with_dependencies(model=model, course=course, parents=parents, **row) diff --git a/finance/migrations/0001_initial.py b/finance/migrations/0001_initial.py index 551ddc3..c5baa5c 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.conf import settings diff --git a/journals/admin.py b/journals/admin.py index fe75dec..a82b12b 100755 --- a/journals/admin.py +++ b/journals/admin.py @@ -2,9 +2,8 @@ from django.contrib import admin -from journals.models import Thread, Journal, Action +from journals.models import Thread, Journal admin.site.register(Thread) -admin.site.register(Journal) -admin.site.register(Action) \ No newline at end of file +admin.site.register(Journal) \ No newline at end of file diff --git a/journals/default_ations.py b/journals/default_ations.py deleted file mode 100644 index ea107fc..0000000 --- a/journals/default_ations.py +++ /dev/null @@ -1,60 +0,0 @@ -import os, sys, django - -sys.path.append("../") -os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import Action - -if __name__ == '__main__': - - Action.objects.update_or_create( - name='try', - text='попытка сдачи чего-либо', - ) - - Action.objects.update_or_create( - name='yes', - text='одобрение чего-либо', - ) - - Action.objects.update_or_create( - name='no', - text='отказ от чего-либо', - ) - - Action.objects.update_or_create( - name='favorite', - text='добавить в избранное', - ) - - Action.objects.update_or_create( - name='watch', - text='просмотр', - ) - - Action.objects.update_or_create( - name='start', - text='начало чего-либо', - ) - - Action.objects.update_or_create( - name='end', - text='окончание чего-либо', - ) - - Action.objects.update_or_create( - name='create', - text='создание чего-либо', - ) - - Action.objects.update_or_create( - name='delete', - text='удаление чего-либо', - ) - - Action.objects.update_or_create( - name='update', - text='изминение чего-либо', - ) \ No newline at end of file diff --git a/journals/migrations/0001_initial.py b/journals/migrations/0001_initial.py index c49c00a..f0a0af6 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.conf import settings @@ -12,27 +12,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ - migrations.CreateModel( - name='Action', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='Наименование действия (на английском)')), - ('text', models.TextField(verbose_name='Описание действия')), - ], - ), migrations.CreateModel( name='Journal', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('extra_data', models.TextField(default='')), + ('extra_data', models.TextField(blank=True, null=True)), ('object_id', models.PositiveIntegerField()), + ('action_type', models.SmallIntegerField(choices=[(0, 'try'), (1, 'yes'), (2, 'no'), (3, 'favorite'), (4, 'watch'), (5, 'start'), (6, 'end'), (7, 'create'), (8, 'update'), (9, 'delete')])), ('date', models.DateTimeField(auto_now=True)), - ('action_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Action')), ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), ], ), diff --git a/journals/models.py b/journals/models.py index a739891..c6b2ee6 100755 --- a/journals/models.py +++ b/journals/models.py @@ -10,20 +10,33 @@ from courses.models import Achievements, Course, CourseMap, Diploma from management.models import Comment from finance.models import Bill +ACTION_CHOICES = ( + (0, 'try'), + (1, 'yes'), + (2, 'no'), + (3, 'favorite'), + (4, 'watch'), + (5, 'start'), + (6, 'end'), + (7, 'create'), + (8, 'update'), + (9, 'delete'), +) + # Новое API class Journal(models.Model): thread = models.ForeignKey(to='Thread', verbose_name=u'Тред') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Инициатор действия') content_type = models.ForeignKey(to=ContentType) - extra_data = models.TextField(default='') + extra_data = models.TextField(null=True, blank=True) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') - action_type = models.ForeignKey(to='Action') + action_type = models.SmallIntegerField(choices=ACTION_CHOICES) date = models.DateTimeField(auto_now=True) def __str__(self): - return '%d Пользователь %s %s %s' % (self.id, self.user.email, self.action_type.name, self.thread.key) + return '%d Пользователь %s %s %s' % (self.id, self.user.email, self.get_action_type_display(), self.thread.key) class Thread(models.Model): @@ -74,11 +87,3 @@ class Thread(models.Model): def __str__(self): return self.key - - -class Action(models.Model): - name = models.CharField(max_length=255, verbose_name=u'Наименование действия (на английском)') - text = models.TextField(verbose_name=u'Описание действия') - - def __str__(self): - return "%s (%s)" % (self.name, self.text) \ No newline at end of file diff --git a/library/migrations/0001_initial.py b/library/migrations/0001_initial.py index e9723cd..bae4641 100644 --- a/library/migrations/0001_initial.py +++ b/library/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2017-10-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals import datetime diff --git a/management/migrations/0001_initial.py b/management/migrations/0001_initial.py index ca39860..cce9a65 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.conf import settings @@ -12,8 +12,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('storage', '0001_initial'), ] diff --git a/service/migrations/0001_initial.py b/service/migrations/0001_initial.py index 1f66785..b80896d 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals import datetime diff --git a/storage/migrations/0001_initial.py b/storage/migrations/0001_initial.py index a561228..9a67f17 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-17 16:06 +# Generated by Django 1.11.6 on 2017-10-18 14:37 from __future__ import unicode_literals from django.db import migrations, models