From d6fdc0e799e9a013801bf6275dc22d4db7d2851b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Barnab=C3=A1s=20Cz=C3=A9m=C3=A1n?= <trabarni@gmail.com>
Date: Thu, 5 Apr 2018 10:56:21 +0200
Subject: [PATCH] Modify homework models & fix some settings

---
 environment.bat.example                       |  1 +
 environment.ps1.example                       |  1 +
 environment.sh.example                        |  1 +
 src/homework/migrations/0001_initial.py       | 37 +++++--------
 .../migrations/0002_auto_20180124_1453.py     | 53 -------------------
 .../migrations/0003_auto_20180124_1818.py     | 22 --------
 .../migrations/0004_auto_20180125_1817.py     | 22 --------
 .../migrations/0004_auto_20180204_1209.py     | 22 --------
 .../migrations/0005_auto_20180126_0135.py     | 20 -------
 .../migrations/0005_auto_20180204_1525.py     | 20 -------
 .../migrations/0006_auto_20180204_1601.py     | 20 -------
 .../migrations/0007_merge_20180205_2021.py    | 14 -----
 .../migrations/0007_merge_20180209_1734.py    | 14 -----
 .../migrations/0008_auto_20180221_1135.py     | 24 ---------
 .../migrations/0009_merge_20180404_0825.py    | 14 -----
 .../migrations/0010_auto_20180404_0828.py     | 30 -----------
 .../migrations/0011_auto_20180404_0853.py     | 25 ---------
 .../migrations/0012_auto_20180404_1253.py     | 20 -------
 src/homework/models.py                        | 29 +++++-----
 src/homework/myfields.py                      | 41 --------------
 src/homework/serializers.py                   |  9 ++--
 src/kszkepzes/settings/base.py                |  3 ++
 src/kszkepzes/urls.py                         |  6 ++-
 23 files changed, 42 insertions(+), 406 deletions(-)
 delete mode 100644 src/homework/migrations/0002_auto_20180124_1453.py
 delete mode 100644 src/homework/migrations/0003_auto_20180124_1818.py
 delete mode 100644 src/homework/migrations/0004_auto_20180125_1817.py
 delete mode 100644 src/homework/migrations/0004_auto_20180204_1209.py
 delete mode 100644 src/homework/migrations/0005_auto_20180126_0135.py
 delete mode 100644 src/homework/migrations/0005_auto_20180204_1525.py
 delete mode 100644 src/homework/migrations/0006_auto_20180204_1601.py
 delete mode 100644 src/homework/migrations/0007_merge_20180205_2021.py
 delete mode 100644 src/homework/migrations/0007_merge_20180209_1734.py
 delete mode 100644 src/homework/migrations/0008_auto_20180221_1135.py
 delete mode 100644 src/homework/migrations/0009_merge_20180404_0825.py
 delete mode 100644 src/homework/migrations/0010_auto_20180404_0828.py
 delete mode 100644 src/homework/migrations/0011_auto_20180404_0853.py
 delete mode 100644 src/homework/migrations/0012_auto_20180404_1253.py
 delete mode 100644 src/homework/myfields.py

diff --git a/environment.bat.example b/environment.bat.example
index 7b9d14b..f13f7a2 100644
--- a/environment.bat.example
+++ b/environment.bat.example
@@ -1,3 +1,4 @@
 setx SECRET_KEY <CHANGE_TO_SECRET>
 setx AUTHSCH_KEY <CHANGE_TO_CLIENT_ID>
 setx AUTHSCH_SECRET <CHANGE_TO_AUTHSCH_SECRET>
+setx MEDIA_ROOT <DIRECTORY_OF_MEDIA>
diff --git a/environment.ps1.example b/environment.ps1.example
index 9b56e25..6fade2f 100644
--- a/environment.ps1.example
+++ b/environment.ps1.example
@@ -1,3 +1,4 @@
 $env:SECRET_KEY=<CHANGE_TO_SECRET>
 $env:AUTHSCH_KEY=<CHANGE_TO_CLIENT_ID>
 $env:AUTHSCH_SECRET=<CHANGE_TO_AUTHSCH_SECRET>
+$env:MEDIA_ROOT=<DIRECTORY_OF_MEDIA>
diff --git a/environment.sh.example b/environment.sh.example
index 14c4e85..56aabd3 100644
--- a/environment.sh.example
+++ b/environment.sh.example
@@ -1,3 +1,4 @@
 export SECRET_KEY=<CHANGE_TO_SECRET>
 export AUTHSCH_KEY=<CHANGE_TO_CLIENT_ID>
 export AUTHSCH_SECRET=<CHANGE_TO_AUTHSCH_SECRET>
+export MEDIA_ROOT=<DIRECTORY_OF_MEDIA>
diff --git a/src/homework/migrations/0001_initial.py b/src/homework/migrations/0001_initial.py
index c06eb42..b92796b 100644
--- a/src/homework/migrations/0001_initial.py
+++ b/src/homework/migrations/0001_initial.py
@@ -1,12 +1,9 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-01-24 12:09
-from __future__ import unicode_literals
+# Generated by Django 2.0.1 on 2018-04-05 08:33
 
-from django.conf import settings
+import common.validators
 import django.core.validators
 from django.db import migrations, models
 import django.db.models.deletion
-import homework.models
 
 
 class Migration(migrations.Migration):
@@ -14,7 +11,7 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('account', '0017_auto_20180205_2004'),
     ]
 
     operations = [
@@ -22,35 +19,29 @@ class Migration(migrations.Migration):
             name='Solution',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('date', models.DateTimeField(auto_now_add=True)),
-                ('ready', models.BooleanField()),
-                ('files', models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip')])),
-                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Student',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('homework', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='homework.Solution')),
-                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+                ('updated_at', models.DateTimeField(auto_now=True)),
+                ('ready', models.BooleanField(default=False)),
+                ('accepted', models.BooleanField(default=False)),
+                ('files', models.FileField(upload_to='', validators=[django.core.validators.FileExtensionValidator(['png', 'jpeg', 'jpg', 'zip']), common.validators.FileSizeValidator(size_limit=52428800)])),
+                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_solution', to='account.Profile')),
             ],
         ),
         migrations.CreateModel(
             name='Task',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+                ('updated_at', models.DateTimeField(auto_now=True)),
                 ('title', models.CharField(max_length=150)),
-                ('date', models.DateTimeField(auto_now_add=True)),
-                ('deadline', models.DateTimeField()),
                 ('text', models.TextField()),
-                ('files', models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip')])),
-                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('deadline', models.DateTimeField()),
+                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='account.Profile')),
             ],
         ),
         migrations.AddField(
             model_name='solution',
             name='task',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='homework.Task'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_solution', to='homework.Task'),
         ),
     ]
diff --git a/src/homework/migrations/0002_auto_20180124_1453.py b/src/homework/migrations/0002_auto_20180124_1453.py
deleted file mode 100644
index 597c83e..0000000
--- a/src/homework/migrations/0002_auto_20180124_1453.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-01-24 13:53
-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 = [
-        ('homework', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='student',
-            name='homework',
-        ),
-        migrations.RemoveField(
-            model_name='student',
-            name='user',
-        ),
-        migrations.AddField(
-            model_name='solution',
-            name='accepted',
-            field=models.BooleanField(default=False),
-        ),
-        migrations.AlterField(
-            model_name='solution',
-            name='created_by',
-            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.AlterField(
-            model_name='solution',
-            name='ready',
-            field=models.BooleanField(default=False),
-        ),
-        migrations.AlterField(
-            model_name='solution',
-            name='task',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_solution', to='homework.Task'),
-        ),
-        migrations.AlterField(
-            model_name='task',
-            name='created_by',
-            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.DeleteModel(
-            name='Student',
-        ),
-    ]
diff --git a/src/homework/migrations/0003_auto_20180124_1818.py b/src/homework/migrations/0003_auto_20180124_1818.py
deleted file mode 100644
index 1fcd873..0000000
--- a/src/homework/migrations/0003_auto_20180124_1818.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-01-24 17:18
-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 = [
-        ('homework', '0002_auto_20180124_1453'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='task',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/src/homework/migrations/0004_auto_20180125_1817.py b/src/homework/migrations/0004_auto_20180125_1817.py
deleted file mode 100644
index 9693462..0000000
--- a/src/homework/migrations/0004_auto_20180125_1817.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-01-25 17:17
-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 = [
-        ('homework', '0003_auto_20180124_1818'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/src/homework/migrations/0004_auto_20180204_1209.py b/src/homework/migrations/0004_auto_20180204_1209.py
deleted file mode 100644
index 4a5edae..0000000
--- a/src/homework/migrations/0004_auto_20180204_1209.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-02-04 11:09
-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 = [
-        ('homework', '0003_auto_20180124_1818'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/src/homework/migrations/0005_auto_20180126_0135.py b/src/homework/migrations/0005_auto_20180126_0135.py
deleted file mode 100644
index 0155be9..0000000
--- a/src/homework/migrations/0005_auto_20180126_0135.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by Django 2.0.1 on 2018-01-26 00:35
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0004_auto_20180125_1817'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='task',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/src/homework/migrations/0005_auto_20180204_1525.py b/src/homework/migrations/0005_auto_20180204_1525.py
deleted file mode 100644
index 33d8e8b..0000000
--- a/src/homework/migrations/0005_auto_20180204_1525.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-02-04 14:25
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0004_auto_20180204_1209'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='solution',
-            old_name='date',
-            new_name='alma',
-        ),
-    ]
diff --git a/src/homework/migrations/0006_auto_20180204_1601.py b/src/homework/migrations/0006_auto_20180204_1601.py
deleted file mode 100644
index f6bdbc0..0000000
--- a/src/homework/migrations/0006_auto_20180204_1601.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.5 on 2018-02-04 15:01
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0005_auto_20180204_1525'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='solution',
-            old_name='alma',
-            new_name='date',
-        ),
-    ]
diff --git a/src/homework/migrations/0007_merge_20180205_2021.py b/src/homework/migrations/0007_merge_20180205_2021.py
deleted file mode 100644
index f48190e..0000000
--- a/src/homework/migrations/0007_merge_20180205_2021.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated by Django 2.0.1 on 2018-02-05 19:21
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0005_auto_20180126_0135'),
-        ('homework', '0006_auto_20180204_1601'),
-    ]
-
-    operations = [
-    ]
diff --git a/src/homework/migrations/0007_merge_20180209_1734.py b/src/homework/migrations/0007_merge_20180209_1734.py
deleted file mode 100644
index c23d34a..0000000
--- a/src/homework/migrations/0007_merge_20180209_1734.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated by Django 2.0.1 on 2018-02-09 16:34
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0006_auto_20180204_1601'),
-        ('homework', '0005_auto_20180126_0135'),
-    ]
-
-    operations = [
-    ]
diff --git a/src/homework/migrations/0008_auto_20180221_1135.py b/src/homework/migrations/0008_auto_20180221_1135.py
deleted file mode 100644
index a26dfa2..0000000
--- a/src/homework/migrations/0008_auto_20180221_1135.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Generated by Django 2.0.1 on 2018-02-21 10:35
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0007_merge_20180209_1734'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_solution', to='account.Profile'),
-        ),
-        migrations.AlterField(
-            model_name='task',
-            name='created_by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='account.Profile'),
-        ),
-    ]
diff --git a/src/homework/migrations/0009_merge_20180404_0825.py b/src/homework/migrations/0009_merge_20180404_0825.py
deleted file mode 100644
index f571560..0000000
--- a/src/homework/migrations/0009_merge_20180404_0825.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated by Django 2.0.1 on 2018-04-04 06:25
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0008_auto_20180221_1135'),
-        ('homework', '0007_merge_20180205_2021'),
-    ]
-
-    operations = [
-    ]
diff --git a/src/homework/migrations/0010_auto_20180404_0828.py b/src/homework/migrations/0010_auto_20180404_0828.py
deleted file mode 100644
index 5be35ff..0000000
--- a/src/homework/migrations/0010_auto_20180404_0828.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Generated by Django 2.0.1 on 2018-04-04 06:28
-
-import common.validators
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0009_merge_20180404_0825'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='files',
-            field=models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip'), common.validators.FileSizeValidator(size_limit=52428800)]),
-        ),
-        migrations.AlterField(
-            model_name='task',
-            name='deadline',
-            field=models.DateTimeField(),
-        ),
-        migrations.AlterField(
-            model_name='task',
-            name='files',
-            field=models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip'), common.validators.FileSizeValidator(size_limit=52428800)]),
-        ),
-    ]
diff --git a/src/homework/migrations/0011_auto_20180404_0853.py b/src/homework/migrations/0011_auto_20180404_0853.py
deleted file mode 100644
index 0524fa0..0000000
--- a/src/homework/migrations/0011_auto_20180404_0853.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Generated by Django 2.0.1 on 2018-04-04 06:53
-
-import common.validators
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0010_auto_20180404_0828'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='files',
-            field=models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator(['image/png', 'image/jpeg', 'application/zip']), common.validators.FileSizeValidator(size_limit=52428800)]),
-        ),
-        migrations.AlterField(
-            model_name='task',
-            name='files',
-            field=models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator(['image/png', 'image/jpeg', 'application/zip']), common.validators.FileSizeValidator(size_limit=52428800)]),
-        ),
-    ]
diff --git a/src/homework/migrations/0012_auto_20180404_1253.py b/src/homework/migrations/0012_auto_20180404_1253.py
deleted file mode 100644
index 7e02121..0000000
--- a/src/homework/migrations/0012_auto_20180404_1253.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by Django 2.0.1 on 2018-04-04 10:53
-
-import common.validators
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('homework', '0011_auto_20180404_0853'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='solution',
-            name='files',
-            field=models.FileField(upload_to='', validators=[django.core.validators.FileExtensionValidator(['image/png', 'image/jpeg', 'zip']), common.validators.FileSizeValidator(size_limit=52428800)]),
-        ),
-    ]
diff --git a/src/homework/models.py b/src/homework/models.py
index 5bf8740..973fb45 100644
--- a/src/homework/models.py
+++ b/src/homework/models.py
@@ -6,22 +6,12 @@ from account.models import Profile
 
 
 class Task(models.Model):
+    created_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
+    created_at = models.DateTimeField(auto_now_add=True, editable=False)
+    updated_at = models.DateTimeField(auto_now=True, editable=False)
     title = models.CharField(max_length=150)
-    date = models.DateTimeField(auto_now_add=True, editable=False)
-    deadline = models.DateTimeField()
     text = models.TextField()
-    created_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
-    files = models.FileField(
-        validators=[
-            validators.FileExtensionValidator([
-                'image/png',
-                'image/jpeg',
-                'application/zip',
-            ]),
-            FileSizeValidator(size_limit=52428800),  # 52428800 - 50MiB
-        ],
-        blank=True,
-    )
+    deadline = models.DateTimeField()
 
     def __str__(self):
         return self.title
@@ -30,16 +20,21 @@ class Task(models.Model):
 class Solution(models.Model):
     task = models.ForeignKey(Task, related_name='task_solution', on_delete=models.CASCADE)
     created_by = models.ForeignKey(Profile, related_name='student_solution', on_delete=models.CASCADE)
-    date = models.DateTimeField(auto_now_add=True, editable=False)
+    created_at = models.DateTimeField(auto_now_add=True, editable=False)
+    updated_at = models.DateTimeField(auto_now=True, editable=False)
     ready = models.BooleanField(default=False)
     accepted = models.BooleanField(default=False)
     files = models.FileField(
         validators=[
             validators.FileExtensionValidator([
-                'image/png',
-                'image/jpeg',
+                'png',
+                'jpeg',
+                'jpg',
                 'zip',
             ]),
             FileSizeValidator(size_limit=52428800),  # 52428800 - 50MiB
         ],
     )
+
+    def __str__(self):
+        return "[{}] {}".format(self.created_at, self.created_by.full_name)
diff --git a/src/homework/myfields.py b/src/homework/myfields.py
deleted file mode 100644
index c343daa..0000000
--- a/src/homework/myfields.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from django import forms
-from django.template.defaultfilters import filesizeformat
-from django.utils.translation import ugettext_lazy as _
-from django.core.exceptions import ValidationError
-
-
-class RestrictedFileField(forms.FileField):
-    """
-    Same as FileField, but you can specify:
-    * content_types - list containing allowed content_types. Example: ['application/pdf', 'image/jpeg']
-    * max_upload_size - a number indicating the maximum file size allowed for upload.
-        2.5MB - 2621440
-        5MB - 5242880
-        10MB - 10485760
-        20MB - 20971520
-        50MB - 5242880
-        100MB - 104857600
-        250MB - 214958080
-        500MB - 429916160
-"""
-
-    def __init__(self, *args, **kwargs):
-        self.content_types = kwargs.pop("content_types")
-        self.max_upload_size = kwargs.pop("max_upload_size")
-        super().__init__(*args, **kwargs)
-
-    def clean(self, data, initial=None):
-        file = super().clean(data, initial)
-
-        try:
-            content_type = file.content_type
-            if content_type in self.content_types:
-                if file._size > self.max_upload_size:
-                    raise ValidationError(_('Please keep filesize under %s. Current filesize %s') % (
-                        filesizeformat(self.max_upload_size), filesizeformat(file._size)))
-            else:
-                raise ValidationError(_('Filetype not supported.'))
-        except AttributeError:
-            pass
-
-        return data
diff --git a/src/homework/serializers.py b/src/homework/serializers.py
index a15f593..afc29b4 100644
--- a/src/homework/serializers.py
+++ b/src/homework/serializers.py
@@ -10,18 +10,19 @@ class TaskSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = models.Task
-        read_only_fields = ('created_by', 'date')
+        read_only_fields = ('created_by', 'created_at', 'updated_at')
         fields = '__all__'
 
 
 class SolutionSerializer(serializers.ModelSerializer):
-    date = serializers.DateTimeField(read_only=True)
+    created_at = serializers.DateTimeField(read_only=True)
+    updated_at = serializers.DateTimeField(read_only=True)
     created_by = serializers.HiddenField(default=CurrentUserProfileDefault())
 
     class Meta:
         model = models.Solution
-        read_only_fields = ('created_by', 'date' 'ready')
-        fields = ('task', 'date', 'accepted', 'files', 'created_by')
+        read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready')
+        fields = ('task', 'created_at', 'updated_at', 'accepted', 'files', 'created_by')
 
     def validate(self, data):
         if timezone.now() > data['task'].deadline:
diff --git a/src/kszkepzes/settings/base.py b/src/kszkepzes/settings/base.py
index e19f0ee..277106b 100644
--- a/src/kszkepzes/settings/base.py
+++ b/src/kszkepzes/settings/base.py
@@ -153,3 +153,6 @@ USE_TZ = True
 # https://docs.djangoproject.com/en/1.11/howto/static-files/
 
 STATIC_URL = '/django-static/'
+
+MEDIA_ROOT = os.getenv('MEDIA_ROOT', '/tmp')
+MEDIA_URL = '/media/'
diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py
index b696e39..3b249d5 100644
--- a/src/kszkepzes/urls.py
+++ b/src/kszkepzes/urls.py
@@ -1,4 +1,6 @@
 from django.conf.urls import url, include
+from django.conf.urls.static import static
+from django.conf import settings
 from django.contrib import admin
 from django.contrib.auth import views as auth_views
 
@@ -9,6 +11,8 @@ urlpatterns = [
     url(r'^api/v1/', include('stats.urls')),
     url(r'^api/v1/', include('account.urls')),
     url(r'^api/v1/', include('news.urls')),
-
     url(r'^api/v1/logout/$', auth_views.LogoutView.as_view(), name='logout'),
 ]
+
+if settings.DEBUG:
+    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-- 
GitLab