From dbae1361f8a4300dcf5fd55fcaffaeca182352fa Mon Sep 17 00:00:00 2001 From: Michael Sterzinger Date: Wed, 16 Mar 2022 16:14:42 +0100 Subject: [PATCH 1/4] data imports --- backend/accounts/migrations/0001_initial.py | 11 +++--- backend/colleges/admin.py | 9 ++++- backend/colleges/migrations/0001_initial.py | 31 +++++++++++---- .../migrations/0002_auto_20220131_1805.py | 35 ----------------- backend/colleges/models.py | 39 +++++++++++++++++++ backend/colleges/temp2.py | 26 +++++++------ .../migrations/0001_initial.py | 2 +- .../qualifications/migrations/0001_initial.py | 24 +++++++++--- .../0002_title_need_specialization.py | 18 --------- .../migrations/0003_lifelonglearning.py | 27 ------------- .../0004_alter_lifelonglearning_options.py | 17 -------- backend/teaching/migrations/0001_initial.py | 6 +-- backend/zacniucit/settings.py | 4 ++ 13 files changed, 115 insertions(+), 134 deletions(-) delete mode 100644 backend/colleges/migrations/0002_auto_20220131_1805.py delete mode 100644 backend/qualifications/migrations/0002_title_need_specialization.py delete mode 100644 backend/qualifications/migrations/0003_lifelonglearning.py delete mode 100644 backend/qualifications/migrations/0004_alter_lifelonglearning_options.py diff --git a/backend/accounts/migrations/0001_initial.py b/backend/accounts/migrations/0001_initial.py index dc0b9856..159e285e 100644 --- a/backend/accounts/migrations/0001_initial.py +++ b/backend/accounts/migrations/0001_initial.py @@ -1,7 +1,6 @@ -# Generated by Django 3.0.2 on 2021-12-01 16:04 +# Generated by Django 3.2.9 on 2022-03-14 16:45 import django.contrib.auth.models -import django.contrib.auth.validators from django.db import migrations, models import django.utils.timezone @@ -11,7 +10,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('auth', '0011_update_proxy_permissions'), + ('auth', '0012_alter_user_first_name_max_length'), ] operations = [ @@ -22,13 +21,13 @@ class Migration(migrations.Migration): ('password', models.CharField(max_length=128, verbose_name='password')), ('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')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('email', models.EmailField(max_length=254, unique=True, verbose_name='Email')), + ('username', models.CharField(max_length=100)), ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), ], diff --git a/backend/colleges/admin.py b/backend/colleges/admin.py index 4e950807..1f8f2e6e 100644 --- a/backend/colleges/admin.py +++ b/backend/colleges/admin.py @@ -2,7 +2,7 @@ from django.contrib import admin from import_export.admin import ImportExportModelAdmin -from .models import College, Faculty, Course +from .models import College, Faculty, Course, DataFile from .resources import CollegeResource, FacultyResource @@ -11,6 +11,11 @@ class FacultyInline(admin.TabularInline): extra = 0 +class DataFileAdmin(admin.ModelAdmin): + list_display = ("file", "uploaded", "modified") + fields = ("file",) + + class CollegeAdmin(ImportExportModelAdmin): list_display = ("name", "type", "form", "code") inlines = [FacultyInline] @@ -28,7 +33,6 @@ class FacultyAdmin(ImportExportModelAdmin): resource_class = FacultyResource - class CourseAdmin(admin.ModelAdmin): list_display = ("name", "display_faculty", "display_college") list_select_related = ("faculty", "faculty__college") @@ -51,6 +55,7 @@ class CourseAdmin(admin.ModelAdmin): display_college.short_description = "Vysoká škola" +admin.site.register(DataFile, DataFileAdmin) admin.site.register(College, CollegeAdmin) admin.site.register(Faculty, FacultyAdmin) admin.site.register(Course, CourseAdmin) diff --git a/backend/colleges/migrations/0001_initial.py b/backend/colleges/migrations/0001_initial.py index d24d5a16..8a1c040f 100644 --- a/backend/colleges/migrations/0001_initial.py +++ b/backend/colleges/migrations/0001_initial.py @@ -1,5 +1,6 @@ -# Generated by Django 3.0.2 on 2021-12-01 16:04 +# Generated by Django 3.2.9 on 2022-03-14 16:45 +import colleges.models import django.contrib.postgres.fields from django.db import migrations, models import django.db.models.deletion @@ -38,6 +39,20 @@ class Migration(migrations.Migration): 'ordering': ('name',), }, ), + migrations.CreateModel( + name='DataFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('file', models.FileField(storage=colleges.models.OverwriteStorage(), upload_to='')), + ('uploaded', models.BooleanField(default=False)), + ], + options={ + 'verbose_name': 'Data soubor', + 'verbose_name_plural': 'Data soubory', + }, + ), migrations.CreateModel( name='Faculty', fields=[ @@ -47,7 +62,7 @@ class Migration(migrations.Migration): ('name', models.CharField(help_text='Název fakulty', max_length=200)), ('rid', models.CharField(help_text='RID', max_length=20)), ('url', models.URLField(help_text='URL')), - ('college', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.College')), + ('college', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.college')), ], options={ 'verbose_name': 'Fakulta vysoké školy', @@ -70,14 +85,14 @@ class Migration(migrations.Migration): ('major', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('jednoobor', 'Jednoobor'), ('dvouobor', 'Dvouobor')], help_text='Kombinace', max_length=20), blank=True, default=list, size=None)), ('url', models.URLField(help_text='URL na podrobnější informace', max_length=350)), ('note', models.TextField(blank=True, help_text='Poznámka')), - ('education_specialization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.EducationSpecialization', verbose_name='Specializace')), - ('faculty', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.Faculty', verbose_name='Fakulta')), - ('other_qualification_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.OtherExperience', verbose_name='Typ ostatní kvalifikace')), - ('qualification_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.QualificationType', verbose_name='Typ kvalifikace')), + ('education_specialization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.educationspecialization', verbose_name='Specializace')), + ('faculty', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.faculty', verbose_name='Fakulta')), + ('other_qualification_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.otherexperience', verbose_name='Typ ostatní kvalifikace')), + ('qualification_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.qualificationtype', verbose_name='Typ kvalifikace')), ('school_levels', models.ManyToManyField(to='teaching.SchoolLevel', verbose_name='Stupně škol')), ('subjects', models.ManyToManyField(to='teaching.Subject', verbose_name='Předměty')), - ('title', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.Title', verbose_name='Titul')), - ('university', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.College', verbose_name='Vysoká škola')), + ('title', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.title', verbose_name='Titul')), + ('university', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.college', verbose_name='Vysoká škola')), ], options={ 'verbose_name': 'Kurz', diff --git a/backend/colleges/migrations/0002_auto_20220131_1805.py b/backend/colleges/migrations/0002_auto_20220131_1805.py deleted file mode 100644 index db736ecf..00000000 --- a/backend/colleges/migrations/0002_auto_20220131_1805.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.9 on 2022-01-31 17:05 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('qualifications', '0003_lifelonglearning'), - ('colleges', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='education_specialization', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.educationspecialization', verbose_name='Specializace'), - ), - migrations.AlterField( - model_name='course', - name='faculty', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='colleges.faculty', verbose_name='Fakulta'), - ), - migrations.AlterField( - model_name='course', - name='other_qualification_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.otherexperience', verbose_name='Typ ostatní kvalifikace'), - ), - migrations.AlterField( - model_name='course', - name='title', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.title', verbose_name='Titul'), - ), - ] diff --git a/backend/colleges/models.py b/backend/colleges/models.py index 79217ca2..44866c27 100644 --- a/backend/colleges/models.py +++ b/backend/colleges/models.py @@ -1,9 +1,17 @@ +import sys from django.db import models from django_extensions.db.models import TimeStampedModel from django.contrib.postgres.fields import ArrayField +from django.core.files.storage import FileSystemStorage +from concurrent.futures.thread import ThreadPoolExecutor + +from init import init from qualifications.models import EducationSpecialization, QualificationType, OtherExperience +sys.path.append("..") + + class College(TimeStampedModel): """ Vysoka skola. @@ -129,3 +137,34 @@ class Course(TimeStampedModel): def __str__(self): return f"{self.qualification_type}, {self.title}, {self.education_specialization}" # return f"{self.name} / {self.faculty}" původně + + +class OverwriteStorage(FileSystemStorage): + """ + Smaže soubor, pokud už existuje. + """ + def get_available_name(self, name, max_length=None): + self.delete(name) + return name + + +class DataFile(TimeStampedModel): + """ + Data pro init. + """ + file = models.FileField(storage=OverwriteStorage()) + uploaded = models.BooleanField(default=False) + + def save(self, *args, **kwargs): + with ThreadPoolExecutor() as executor: + executor.submit(super(DataFile, self).save()) + executor.submit(init()) + self.uploaded = True + super(DataFile, self).save() + + class Meta: + verbose_name = "Data soubor" + verbose_name_plural = "Data soubory" + + def __str__(self): + return f"{self.file} - {self.modified} - {self.uploaded}" diff --git a/backend/colleges/temp2.py b/backend/colleges/temp2.py index 22c98a14..6e74f9cd 100644 --- a/backend/colleges/temp2.py +++ b/backend/colleges/temp2.py @@ -1,6 +1,8 @@ import os import csv -from .models import College, Faculty, Course + +import colleges.models as mod + from teaching.models import SchoolLevel, Subject from qualifications.models import Title, EducationSpecialization, QualificationType, OtherExperience from django.core.exceptions import ObjectDoesNotExist @@ -18,7 +20,7 @@ def get_courses_from_csv(filepath): def add_missing_language_school(): - c, created = College.objects.get_or_create( + c, created = mod.College.objects.get_or_create( name="Jazyková škola - EVROPSKÉ VZDĚLÁVACÍ CENTRUM", defaults={ "type": "jazykova skola", @@ -30,8 +32,8 @@ def add_missing_language_school(): def add_missing_institute_of_lifelong_learning(): - college = College.objects.get(name="Mendelova univerzita v Brně") - c, created = Faculty.objects.get_or_create( + college = mod.College.objects.get(name="Mendelova univerzita v Brně") + c, created = mod.Faculty.objects.get_or_create( name="Institut celoživotního vzdělávání", defaults={"college": college, "url": "https://icv.mendelu.cz/"} ) @@ -99,13 +101,13 @@ def init_courses(): name = course["Název"] - university = College.objects.filter(name=course["Vysoká škola"].strip()).first() + university = mod.College.objects.filter(name=course["Vysoká škola"].strip()).first() if not university: print("Can not import %s" % name) continue try: - faculty = Faculty.objects.get(name=course["Fakulta"], college=university.id) + faculty = mod.Faculty.objects.get(name=course["Fakulta"], college=university.id) except ObjectDoesNotExist: faculty = False city = course["Město"] @@ -120,23 +122,23 @@ def init_courses(): study_form = [] if "P" in course["P"]: - study_form.append(Course.FORM_PRESENT) + study_form.append(mod.Course.FORM_PRESENT) if "K" in course["K"]: - study_form.append(Course.FORM_COMBINED) + study_form.append(mod.Course.FORM_COMBINED) if "D" in course["DF"]: - study_form.append(Course.FORM_DISTANT) + study_form.append(mod.Course.FORM_DISTANT) major = [] if course["dvouobor"] == "1": - major.append(Course.MAJOR_DOUBLE) + major.append(mod.Course.MAJOR_DOUBLE) if course["jednoobor"] == "1": - major.append(Course.MAJOR_SINGLE) + major.append(mod.Course.MAJOR_SINGLE) url = course["Odkaz na více info"] note = course["Poznámka"] - c, created = Course.objects.get_or_create( + c, created = mod.Course.objects.get_or_create( name=name, url=url, defaults={ diff --git a/backend/content_management/migrations/0001_initial.py b/backend/content_management/migrations/0001_initial.py index 290371c4..159fd73b 100644 --- a/backend/content_management/migrations/0001_initial.py +++ b/backend/content_management/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.2 on 2021-12-01 16:04 +# Generated by Django 3.2.9 on 2022-03-14 09:25 from django.db import migrations, models diff --git a/backend/qualifications/migrations/0001_initial.py b/backend/qualifications/migrations/0001_initial.py index 475e2a78..3dbd5b5f 100644 --- a/backend/qualifications/migrations/0001_initial.py +++ b/backend/qualifications/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.2 on 2021-12-01 16:04 +# Generated by Django 3.2.9 on 2022-03-14 16:45 from django.db import migrations, models import django.db.models.deletion @@ -58,6 +58,19 @@ class Migration(migrations.Migration): 'ordering': ('id', 'qualification_type'), }, ), + migrations.CreateModel( + name='LifelongLearning', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('name', models.CharField(max_length=100, verbose_name='Název')), + ], + options={ + 'verbose_name': 'Kurz CŽV', + 'verbose_name_plural': 'Kurzy CŽV', + }, + ), migrations.CreateModel( name='OtherExperience', fields=[ @@ -123,6 +136,7 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=100, verbose_name='Název')), ('code', models.CharField(max_length=20, unique=True, verbose_name='Zkratka')), ('visible_in_form', models.BooleanField(default=True)), + ('need_specialization', models.BooleanField(default=True)), ], options={ 'verbose_name': 'Titul', @@ -141,7 +155,7 @@ class Migration(migrations.Migration): ('row_id', models.SmallIntegerField(unique=True)), ('note', models.TextField(null=True, verbose_name='Poznámka')), ('education_types', models.ManyToManyField(help_text='Typ vzdělání z hlediska zákona', to='qualifications.EducationType', verbose_name='Typ vzdělání z hlediska zákona')), - ('school_level', models.ForeignKey(default='', on_delete=django.db.models.deletion.SET_DEFAULT, to='teaching.SchoolLevel', verbose_name='Stupeň školy')), + ('school_level', models.ForeignKey(default='', on_delete=django.db.models.deletion.SET_DEFAULT, to='teaching.schoollevel', verbose_name='Stupeň školy')), ('subject_groups', models.ManyToManyField(to='teaching.SubjectGroup', verbose_name='Skupiny předmětů')), ], options={ @@ -152,7 +166,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='educationtype', name='qualification_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.QualificationType', verbose_name='Typ kvalifikace'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.qualificationtype', verbose_name='Typ kvalifikace'), ), migrations.AddField( model_name='educationtype', @@ -172,7 +186,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='educationtype', name='title', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.Title', verbose_name='Titul'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.title', verbose_name='Titul'), ), migrations.CreateModel( name='CollegeProgramme', @@ -181,7 +195,7 @@ class Migration(migrations.Migration): ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('name', models.CharField(max_length=100, verbose_name='Studijní program')), - ('area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.CollegeArea', verbose_name='Oblast VŠ vzdělávání')), + ('area', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='qualifications.collegearea', verbose_name='Oblast VŠ vzdělávání')), ('subjects', models.ManyToManyField(help_text='Co můžeš učit na 2.stupni ZŠ nebo na SŠ.', to='teaching.Subject', verbose_name='Vzdělávací oblast podle RVP')), ], options={ diff --git a/backend/qualifications/migrations/0002_title_need_specialization.py b/backend/qualifications/migrations/0002_title_need_specialization.py deleted file mode 100644 index 9f9fac84..00000000 --- a/backend/qualifications/migrations/0002_title_need_specialization.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.9 on 2022-01-31 07:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('qualifications', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='title', - name='need_specialization', - field=models.BooleanField(default=True), - ), - ] diff --git a/backend/qualifications/migrations/0003_lifelonglearning.py b/backend/qualifications/migrations/0003_lifelonglearning.py deleted file mode 100644 index c9460076..00000000 --- a/backend/qualifications/migrations/0003_lifelonglearning.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.9 on 2022-01-31 09:58 - -from django.db import migrations, models -import django_extensions.db.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('qualifications', '0002_title_need_specialization'), - ] - - operations = [ - migrations.CreateModel( - name='LifelongLearning', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('name', models.CharField(max_length=100, verbose_name='Název')), - ], - options={ - 'verbose_name': 'Kurz CŽV', - 'verbose_name_plural': 'Další možnosti', - }, - ), - ] diff --git a/backend/qualifications/migrations/0004_alter_lifelonglearning_options.py b/backend/qualifications/migrations/0004_alter_lifelonglearning_options.py deleted file mode 100644 index 99d1f272..00000000 --- a/backend/qualifications/migrations/0004_alter_lifelonglearning_options.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.9 on 2022-01-31 14:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('qualifications', '0003_lifelonglearning'), - ] - - operations = [ - migrations.AlterModelOptions( - name='lifelonglearning', - options={'verbose_name': 'Kurz CŽV', 'verbose_name_plural': 'Kurzy CŽV'}, - ), - ] diff --git a/backend/teaching/migrations/0001_initial.py b/backend/teaching/migrations/0001_initial.py index 3716cf62..9c8412d5 100644 --- a/backend/teaching/migrations/0001_initial.py +++ b/backend/teaching/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.2 on 2021-12-01 16:04 +# Generated by Django 3.2.9 on 2022-03-14 16:45 from django.db import migrations, models import django.db.models.deletion @@ -49,7 +49,7 @@ class Migration(migrations.Migration): ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('name', models.CharField(max_length=100, verbose_name='Název předmětu')), ('code', models.CharField(max_length=20, unique=True, verbose_name='Zkratka')), - ('subject_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='teaching.SubjectGroup', verbose_name='Předmětová skupina')), + ('subject_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='teaching.subjectgroup', verbose_name='Předmětová skupina')), ], options={ 'verbose_name': 'Vzdělávací oblast podle RVP', @@ -64,7 +64,7 @@ class Migration(migrations.Migration): ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('name', models.CharField(max_length=100, unique=True, verbose_name='Název')), - ('type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='teaching.SchoolType', verbose_name='Typ školy')), + ('type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='teaching.schooltype', verbose_name='Typ školy')), ], options={ 'verbose_name': 'Podtyp školy', diff --git a/backend/zacniucit/settings.py b/backend/zacniucit/settings.py index 21d9880c..91d5e7f3 100644 --- a/backend/zacniucit/settings.py +++ b/backend/zacniucit/settings.py @@ -139,6 +139,10 @@ USE_TZ = True STATIC_ROOT = os.path.join(BASE_DIR, 'static/') STATIC_URL = "/static/" +# Uploaded files for init +MEDIA_URL = '/files/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'data_init/') + ########### # GraphQL # -- GitLab From 79f796bb436303c040e5ca429939136a81267822 Mon Sep 17 00:00:00 2001 From: Michael Sterzinger Date: Wed, 16 Mar 2022 16:36:57 +0100 Subject: [PATCH 2/4] media url --- backend/colleges/models.py | 4 +++- backend/zacniucit/urls.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/colleges/models.py b/backend/colleges/models.py index 44866c27..31f091cd 100644 --- a/backend/colleges/models.py +++ b/backend/colleges/models.py @@ -143,6 +143,7 @@ class OverwriteStorage(FileSystemStorage): """ Smaže soubor, pokud už existuje. """ + def get_available_name(self, name, max_length=None): self.delete(name) return name @@ -152,6 +153,7 @@ class DataFile(TimeStampedModel): """ Data pro init. """ + file = models.FileField(storage=OverwriteStorage()) uploaded = models.BooleanField(default=False) @@ -167,4 +169,4 @@ class DataFile(TimeStampedModel): verbose_name_plural = "Data soubory" def __str__(self): - return f"{self.file} - {self.modified} - {self.uploaded}" + return f"{self.file.name} - {self.modified} - Uploaded: {self.uploaded}" diff --git a/backend/zacniucit/urls.py b/backend/zacniucit/urls.py index 4eb43795..577f9d97 100644 --- a/backend/zacniucit/urls.py +++ b/backend/zacniucit/urls.py @@ -2,6 +2,8 @@ from django.contrib import admin from django.urls import path from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView +from django.conf import settings +from django.conf.urls.static import static from common.views import homepage @@ -11,4 +13,4 @@ urlpatterns = [ path("admin/", admin.site.urls), path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))), path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True))), -] +] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -- GitLab From ca141bd2742d40638364d9852a69b9d4f24d2695 Mon Sep 17 00:00:00 2001 From: Michael Sterzinger Date: Wed, 16 Mar 2022 16:39:52 +0100 Subject: [PATCH 3/4] Revert "media url" This reverts commit 79f796bb436303c040e5ca429939136a81267822. --- backend/colleges/models.py | 4 +--- backend/zacniucit/urls.py | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/backend/colleges/models.py b/backend/colleges/models.py index 31f091cd..44866c27 100644 --- a/backend/colleges/models.py +++ b/backend/colleges/models.py @@ -143,7 +143,6 @@ class OverwriteStorage(FileSystemStorage): """ Smaže soubor, pokud už existuje. """ - def get_available_name(self, name, max_length=None): self.delete(name) return name @@ -153,7 +152,6 @@ class DataFile(TimeStampedModel): """ Data pro init. """ - file = models.FileField(storage=OverwriteStorage()) uploaded = models.BooleanField(default=False) @@ -169,4 +167,4 @@ class DataFile(TimeStampedModel): verbose_name_plural = "Data soubory" def __str__(self): - return f"{self.file.name} - {self.modified} - Uploaded: {self.uploaded}" + return f"{self.file} - {self.modified} - {self.uploaded}" diff --git a/backend/zacniucit/urls.py b/backend/zacniucit/urls.py index 577f9d97..4eb43795 100644 --- a/backend/zacniucit/urls.py +++ b/backend/zacniucit/urls.py @@ -2,8 +2,6 @@ from django.contrib import admin from django.urls import path from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView -from django.conf import settings -from django.conf.urls.static import static from common.views import homepage @@ -13,4 +11,4 @@ urlpatterns = [ path("admin/", admin.site.urls), path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))), path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True))), -] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +] -- GitLab From 20d3882994847070e33ca094696a9a0183cea242 Mon Sep 17 00:00:00 2001 From: Michael Sterzinger Date: Wed, 16 Mar 2022 16:41:13 +0100 Subject: [PATCH 4/4] media url --- backend/colleges/models.py | 4 +++- backend/zacniucit/urls.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/colleges/models.py b/backend/colleges/models.py index 44866c27..31f091cd 100644 --- a/backend/colleges/models.py +++ b/backend/colleges/models.py @@ -143,6 +143,7 @@ class OverwriteStorage(FileSystemStorage): """ Smaže soubor, pokud už existuje. """ + def get_available_name(self, name, max_length=None): self.delete(name) return name @@ -152,6 +153,7 @@ class DataFile(TimeStampedModel): """ Data pro init. """ + file = models.FileField(storage=OverwriteStorage()) uploaded = models.BooleanField(default=False) @@ -167,4 +169,4 @@ class DataFile(TimeStampedModel): verbose_name_plural = "Data soubory" def __str__(self): - return f"{self.file} - {self.modified} - {self.uploaded}" + return f"{self.file.name} - {self.modified} - Uploaded: {self.uploaded}" diff --git a/backend/zacniucit/urls.py b/backend/zacniucit/urls.py index 4eb43795..577f9d97 100644 --- a/backend/zacniucit/urls.py +++ b/backend/zacniucit/urls.py @@ -2,6 +2,8 @@ from django.contrib import admin from django.urls import path from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView +from django.conf import settings +from django.conf.urls.static import static from common.views import homepage @@ -11,4 +13,4 @@ urlpatterns = [ path("admin/", admin.site.urls), path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))), path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True))), -] +] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -- GitLab