зависимости

feature/fix_generate_pass
Andrey 8 years ago
parent a681f3fd3f
commit d3bf1db1a2
  1. 13
      access/migrations/0001_initial.py
  2. 19
      access/migrations/0003_remove_progresslesson_comment.py
  3. 9
      access/models/other.py
  4. 4
      achievements/migrations/0001_initial.py
  5. 5
      courses/migrations/0001_initial.py
  6. 25
      courses/migrations/0003_auto_20180111_1541.py
  7. 1
      courses/models.py
  8. 22
      csv/load_bills.py
  9. 42
      csv/load_courses.py
  10. 5
      csv/load_diploma.py
  11. 3
      csv/load_perm.py
  12. 6
      finance/migrations/0001_initial.py
  13. 20
      finance/migrations/0002_auto_20180112_1013.py
  14. 4
      finance/models.py
  15. 2
      library/migrations/0001_initial.py
  16. 2
      storage/migrations/0001_initial.py

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
import access.models.user import access.models.user
@ -76,8 +76,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Progress', name='Progress',
fields=[ fields=[
('hidden_lessons', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен урока'), default=[], size=None, verbose_name='Список скрытых уроков')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('course_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен курса')), ('hidden_lessons', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, unique=True, verbose_name='Токен урока'), default=[], size=None, verbose_name='Список скрытых уроков')),
('course_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен курса')),
('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_progress', to=settings.AUTH_USER_MODEL, verbose_name='Преподователь по умолчанию')), ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_progress', to=settings.AUTH_USER_MODEL, verbose_name='Преподователь по умолчанию')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент')),
], ],
@ -89,7 +90,8 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='ProgressLesson', name='ProgressLesson',
fields=[ fields=[
('lesson_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен урока')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('lesson_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен урока')),
('comment', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=15, unique=True, verbose_name='Ссылки на комменты'), default=[], size=None)), ('comment', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=15, unique=True, verbose_name='Ссылки на комменты'), default=[], size=None)),
('date', models.DateTimeField(blank=True, null=True, verbose_name='Дата зачтения задания')), ('date', models.DateTimeField(blank=True, null=True, verbose_name='Дата зачтения задания')),
('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.Progress')), ('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.Progress')),
@ -116,8 +118,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='UserAnswerBlock', name='UserAnswerBlock',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateTimeField(auto_now_add=True, verbose_name='Дата сдачи')), ('date', models.DateTimeField(auto_now_add=True, verbose_name='Дата сдачи')),
('demand_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен правила')), ('demand_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен правила')),
('checker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Проверяющий')), ('checker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Проверяющий')),
('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.ProgressLesson')), ('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.ProgressLesson')),
], ],

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-12 10:57
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('access', '0002_init_group'),
]
operations = [
migrations.RemoveField(
model_name='progresslesson',
name='comment',
),
]

@ -46,14 +46,14 @@ class Account(models.Model):
class Progress(models.Model): class Progress(models.Model):
hidden_lessons = ArrayField( hidden_lessons = ArrayField(
models.UUIDField(verbose_name="Токен урока", primary_key=True, editable=False), models.UUIDField(verbose_name="Токен урока", unique=True, editable=False),
default=[], default=[],
verbose_name='Список скрытых уроков', verbose_name='Список скрытых уроков',
) )
teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь по умолчанию", teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь по умолчанию",
related_name='teacher_progress') related_name='teacher_progress')
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент')
course_token = models.UUIDField(verbose_name="Токен курса", primary_key=True, editable=False) course_token = models.UUIDField(verbose_name="Токен курса", unique=True, editable=False)
def __str__(self): def __str__(self):
return '%s' % (self.user.email,) return '%s' % (self.user.email,)
@ -66,9 +66,8 @@ class Progress(models.Model):
class ProgressLesson(models.Model): class ProgressLesson(models.Model):
progress = models.ForeignKey(to=Progress) progress = models.ForeignKey(to=Progress)
lesson_token = models.UUIDField(verbose_name="Токен урока", primary_key=True, editable=False) lesson_token = models.UUIDField(verbose_name="Токен урока", unique=True, editable=False)
teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",)
comment = ArrayField(models.CharField(max_length=15, verbose_name='Ссылки на комменты', unique=True), default=[])
date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True)
class Meta: class Meta:
@ -79,7 +78,7 @@ class ProgressLesson(models.Model):
class UserAnswerBlock(models.Model): class UserAnswerBlock(models.Model):
progress = models.ForeignKey(to=ProgressLesson) progress = models.ForeignKey(to=ProgressLesson)
date = models.DateTimeField(verbose_name='Дата сдачи', auto_now_add=True) date = models.DateTimeField(verbose_name='Дата сдачи', auto_now_add=True)
demand_token = models.UUIDField(verbose_name="Токен правила", primary_key=True, editable=False) demand_token = models.UUIDField(verbose_name="Токен правила", unique=True, editable=False)
checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Проверяющий",) checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Проверяющий",)
class Meta: class Meta:

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
@ -12,8 +12,8 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('courses', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('courses', '0001_initial'),
] ]
operations = [ operations = [

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
import django.contrib.postgres.fields import django.contrib.postgres.fields
@ -26,7 +26,7 @@ class Migration(migrations.Migration):
('level', models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень')), ('level', models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень')),
('direction', models.SmallIntegerField(choices=[(3, 'Бизнес'), (2, 'Веб-дизайн'), (1, 'Разработка'), (4, 'Рисование'), (5, 'Музыка')], verbose_name='Направление')), ('direction', models.SmallIntegerField(choices=[(3, 'Бизнес'), (2, 'Веб-дизайн'), (1, 'Разработка'), (4, 'Рисование'), (5, 'Музыка')], verbose_name='Направление')),
('public', models.BooleanField(default=False, verbose_name='Опубликовать')), ('public', models.BooleanField(default=False, verbose_name='Опубликовать')),
('teachers', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=15, verbose_name='Ссылки на преподов'), default=[], size=None)), ('teacher_tokens', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен препода'), default=[], size=None, verbose_name='Преподователи курса')),
('image', models.URLField(blank=True, max_length=255, verbose_name='Изображение')), ('image', models.URLField(blank=True, max_length=255, verbose_name='Изображение')),
('big_image', models.URLField(blank=True, max_length=255, verbose_name='Большое изображение')), ('big_image', models.URLField(blank=True, max_length=255, verbose_name='Большое изображение')),
('big_mobile_image', models.URLField(blank=True, help_text='Большая картинка для мобильной версии', max_length=255, verbose_name='Под мобилку')), ('big_mobile_image', models.URLField(blank=True, help_text='Большая картинка для мобильной версии', max_length=255, verbose_name='Под мобилку')),
@ -106,6 +106,7 @@ class Migration(migrations.Migration):
('title', models.CharField(max_length=255, verbose_name='Название')), ('title', models.CharField(max_length=255, verbose_name='Название')),
('description', models.TextField(blank=True, null=True, verbose_name='Описание')), ('description', models.TextField(blank=True, null=True, verbose_name='Описание')),
('icon', models.ImageField(blank=True, null=True, upload_to='', verbose_name='Иконка темы')), ('icon', models.ImageField(blank=True, null=True, upload_to='', verbose_name='Иконка темы')),
('sort', models.SmallIntegerField(unique=True)),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='курс')), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='курс')),
], ],
options={ options={

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 15:41
from __future__ import unicode_literals
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('courses', '0002_init_demands'),
]
operations = [
migrations.RemoveField(
model_name='course',
name='teachers',
),
migrations.AddField(
model_name='course',
name='teacher_tokens',
field=django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен препода'), default=[], size=None, verbose_name='Преподователи курса'),
),
]

@ -103,6 +103,7 @@ class Topic(models.Model):
title = models.CharField(verbose_name='Название', max_length=255) title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True) description = models.TextField(verbose_name='Описание', blank=True, null=True)
icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True) icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True)
sort = models.SmallIntegerField(unique=True)
class Meta: class Meta:
verbose_name = "Тема" verbose_name = "Тема"

@ -28,12 +28,11 @@ if __name__ == '__main__':
bill_kwarg = dict() bill_kwarg = dict()
row = dict(row) row = dict(row)
bill_kwarg['id'] = row.pop('id', None) bill_kwarg['id'] = row.pop('id', None)
bill_kwarg['route'] = Course.objects.get(id=row.pop('course__id', None)).route.out_key opener = row.pop('opener', None)
opener_id = row.pop('opener__id', None) bill_kwarg['opener'] = get_user_model().objects.get(email=opener) if opener \
bill_kwarg['opener'] = get_user_model().objects.get(id=opener_id) if opener_id \
else get_user_model().objects.get(email="kate.gazukina@skillbox.ru") else get_user_model().objects.get(email="kate.gazukina@skillbox.ru")
email = row.pop('user__email', None) email = row.pop('user', None)
try: try:
email = email[:email.index("\n")] email = email[:email.index("\n")]
except ValueError: except ValueError:
@ -46,12 +45,15 @@ if __name__ == '__main__':
bill_kwarg['comment'] = row.pop('comment', None) bill_kwarg['comment'] = row.pop('comment', None)
bill_kwarg['description'] = row.pop('description', None) bill_kwarg['description'] = row.pop('description', None)
bill_kwarg['course_token'] = Course.objects.get(slug=row.pop('course', None)).token
try: try:
bill = Bill.objects.create(**bill_kwarg) bill = Bill.objects.create(**bill_kwarg)
except IntegrityError: except IntegrityError:
pass bill = Bill.objects.get(course_token=bill_kwarg['course_token'], user=bill_kwarg['user'])
method = row.pop('bill_method', None) method = row.pop('bill_method', None)
try: try:
price = int(row.pop('price', None)) price = int(row.pop('price', None))
except ValueError: except ValueError:
@ -71,12 +73,16 @@ if __name__ == '__main__':
inv.save() inv.save()
if method == 'Y' and not row['status'] == 'W' and price: if method == 'Y' and not row['status'] == 'W' and price:
row['yandex_pay'], _is_create = Payment.objects.get_or_create( yandex_pay, _is_create = Payment.objects.get_or_create(
order_amount=price, order_amount=price,
order_number=inv.id, order_number=inv.id,
customer_number=bill.user.id, customer_number=bill.user.out_key,
user=bill.user, user=bill.user,
cps_email=bill.user.email, cps_email=bill.user.email,
shop_amount=real_price, shop_amount=real_price,
status='Processed' if 'P' else ('Success' if 'F' else 'Fail') status=Payment.STATUS.PROCESSED if row['status'] == 'P' else
(Payment.STATUS.SUCCESS if row['status'] == 'F' else Payment.STATUS.FAIL)
) )
inv.yandex_pay = yandex_pay
inv.save()

@ -1,7 +1,5 @@
import csv import csv
import os import os
import random
import string
import sys import sys
import django import django
@ -12,7 +10,7 @@ django.setup()
from courses.api import InApiTeacher from courses.api import InApiTeacher
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from courses.models import Course, Lesson, Topic from courses.models import Course, Lesson, Topic, Demand, LessonDemand
from storage.models import File from storage.models import File
if __name__ == '__main__': if __name__ == '__main__':
@ -36,6 +34,8 @@ if __name__ == '__main__':
print('Плохо') print('Плохо')
with open('./course/vertex.csv') as vertex_csv: with open('./course/vertex.csv') as vertex_csv:
t_sort = 0
l_sort = 0
vertex_reader = csv.DictReader(vertex_csv) vertex_reader = csv.DictReader(vertex_csv)
for row in vertex_reader: for row in vertex_reader:
row = dict(row) row = dict(row)
@ -52,51 +52,53 @@ if __name__ == '__main__':
pass pass
if model_type == 'topic': if model_type == 'topic':
course = Course.objects.get(id=row.pop('course', None)) t_sort += 1
course = Course.objects.get(slug=row.pop('course', None))
Topic.objects.create( Topic.objects.create(
id=pk, id=pk,
icon=row.pop('icon', None), icon=row.pop('icon', None),
course=course, course=course,
description=description, description=description,
title=title, title=title,
sort=t_sort,
) )
try: try:
topic_id = row.pop('topic', None) topic_id = row.pop('topic', None)
last_pivot = PivotVertex.objects.filter(map_course=map_obj).last()
if model_type == 'tutorial': if model_type == 'tutorial':
l_sort += 1
topic = Topic.objects.get(id=topic_id) topic = Topic.objects.get(id=topic_id)
small_vertex = Lesson.objects.create( small_vertex = Lesson.objects.create(
id=pk,
video=row.pop('video', None), video=row.pop('video', None),
materials=materials, material_tokens=materials,
topic=topic, topic=topic,
free=row['free'], free=row['free'],
description=description, description=description,
title=title, title=title,
token=''.join(random.choice(string.ascii_letters) for x in range(15)) sort=l_sort,
) )
PivotVertex.objects.create(
map_course=map_obj, LessonDemand.objects.create(
vertex=small_vertex, lesson=small_vertex,
sort=last_pivot.sort+1 if last_pivot else 1, demand=Demand.objects.get(name="Стандартные требования"),
) )
if model_type == 'task': if model_type == 'task':
l_sort += 1
topic = Topic.objects.get(id=topic_id) topic = Topic.objects.get(id=topic_id)
small_vertex = Lesson.objects.create( small_vertex = Lesson.objects.create(
id=pk, material_tokens=materials,
materials=materials,
topic=topic, topic=topic,
description=description, description=description,
title=title, title=title,
valid_type=1, sort=l_sort,
token=''.join(random.choice(string.ascii_letters) for x in range(15))
) )
PivotVertex.objects.create(
map_course=map_obj, LessonDemand.objects.create(
vertex=small_vertex, lesson=small_vertex,
sort=last_pivot.sort+1 if last_pivot else 1, demand=Demand.objects.get(name="Стандартные требования"),
) )
except Topic.DoesNotExist: except Topic.DoesNotExist:
pass pass

@ -20,9 +20,10 @@ if __name__ == '__main__':
achievements_reader = csv.DictReader(achievements_csv) achievements_reader = csv.DictReader(achievements_csv)
for row in achievements_reader: for row in achievements_reader:
a = Achievement.objects.get(id=row['id']) a = Achievement.objects.get(id=row['id'])
a.users.add(get_user_model().objects.get(id=row['student_id'])) a.users.add(get_user_model().objects.get(email=row['user']))
with open('./achievement/diploma.csv') as achievements_csv: with open('./achievement/diploma.csv') as achievements_csv:
achievements_reader = csv.DictReader(achievements_csv) achievements_reader = csv.DictReader(achievements_csv)
for row in achievements_reader: for row in achievements_reader:
Diploma.objects.create(**row) user=get_user_model().objects.get(email=row.pop('user', None))
Diploma.objects.create(user=user, **row)

@ -13,8 +13,7 @@ django.setup()
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from access.models.other import Progress, ProgressLesson from access.models.other import Progress, ProgressLesson
from course_service.courses.models import Lesson, Course from courses.models import Lesson, Course
from course_service.maps.api import OutApiRoute
if __name__ == '__main__': if __name__ == '__main__':
Progress.objects.all().delete() Progress.objects.all().delete()

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
@ -21,7 +21,7 @@ class Migration(migrations.Migration):
name='Bill', name='Bill',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('route', models.CharField(max_length=15, verbose_name='Токен роута')), ('course_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен курса')),
('comment', models.TextField(blank=True, editable=False, help_text='Будет показано пользователю', verbose_name='Комментарий продавца')), ('comment', models.TextField(blank=True, editable=False, help_text='Будет показано пользователю', verbose_name='Комментарий продавца')),
('description', models.TextField(blank=True, verbose_name='Внутренняя заметка')), ('description', models.TextField(blank=True, verbose_name='Внутренняя заметка')),
('opener', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник')), ('opener', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник')),
@ -54,6 +54,6 @@ class Migration(migrations.Migration):
), ),
migrations.AlterUniqueTogether( migrations.AlterUniqueTogether(
name='bill', name='bill',
unique_together=set([('route', 'user')]), unique_together=set([('course_token', 'user')]),
), ),
] ]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-12 10:13
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='bill',
name='course_token',
field=models.UUIDField(editable=False, verbose_name='Токен курса'),
),
]

@ -7,7 +7,7 @@ from courses.models import Course, Lesson
class Bill(models.Model): class Bill(models.Model):
route = models.CharField(max_length=15, verbose_name='Токен роута') course_token = models.UUIDField(verbose_name="Токен курса", editable=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Плательщик', related_name='bill_user') user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Плательщик', related_name='bill_user')
opener = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник', null=True) opener = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник', null=True)
comment = models.TextField(verbose_name='Комментарий продавца', help_text='Будет показано пользователю', comment = models.TextField(verbose_name='Комментарий продавца', help_text='Будет показано пользователю',
@ -24,7 +24,7 @@ class Bill(models.Model):
verbose_name = 'Счет' verbose_name = 'Счет'
verbose_name_plural = 'Счета' verbose_name_plural = 'Счета'
unique_together = ( unique_together = (
('route', 'user',), ('course_token', 'user',),
) )

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-11 14:34 # Generated by Django 1.11.6 on 2018-01-11 17:32
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models

Loading…
Cancel
Save