diff --git a/ofu_app/apps/donar/migrations/0010_auto_20171207_1245.py b/ofu_app/apps/donar/migrations/0010_auto_20171207_1245.py new file mode 100644 index 0000000..168fb1c --- /dev/null +++ b/ofu_app/apps/donar/migrations/0010_auto_20171207_1245.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2017-12-07 11:45 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('donar', '0009_auto_20171204_1648'), + ] + + operations = [ + migrations.AlterField( + model_name='lecture_terms', + name='starttime', + field=models.TimeField(default=datetime.datetime(2017, 12, 7, 11, 45, 42, 534016, tzinfo=utc)), + ), + ] diff --git a/ofu_app/apps/donar/migrations/0011_auto_20171207_1247.py b/ofu_app/apps/donar/migrations/0011_auto_20171207_1247.py new file mode 100644 index 0000000..ce5c0b2 --- /dev/null +++ b/ofu_app/apps/donar/migrations/0011_auto_20171207_1247.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2017-12-07 11:47 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('donar', '0010_auto_20171207_1245'), + ] + + operations = [ + migrations.AlterField( + model_name='lecture_terms', + name='starttime', + field=models.TimeField(default=datetime.datetime(2017, 12, 7, 11, 47, 6, 785241, tzinfo=utc)), + ), + ] diff --git a/ofu_app/apps/food/migrations/0006_auto_20171207_1245.py b/ofu_app/apps/food/migrations/0006_auto_20171207_1245.py new file mode 100644 index 0000000..1e9e262 --- /dev/null +++ b/ofu_app/apps/food/migrations/0006_auto_20171207_1245.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2017-12-07 11:45 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0005_auto_20171204_1634'), + ] + + operations = [ + migrations.AddField( + model_name='userfoodimage', + name='thumbnail', + field=models.ImageField(blank=True, upload_to='food/thumbs/%Y/%m/%W'), + ), + migrations.AlterField( + model_name='menu', + name='menu', + field=models.ManyToManyField(related_name='foods', to='food.SingleFood'), + ), + migrations.AlterField( + model_name='userfoodimage', + name='image', + field=models.ImageField(blank=True, upload_to='food/originals/%Y/%m/%W'), + ), + ] diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index f2b7bc9..1e19650 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -1,8 +1,15 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils import timezone -from django.db import models + +import os +from io import BytesIO + +from PIL import Image +from django.conf import settings from django.contrib.auth.models import User +from django.core.files.uploadedfile import SimpleUploadedFile +from django.db import models +from django.utils import timezone MAX_LENGTH = 60 @@ -72,10 +79,37 @@ class UserFoodImage(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(User, on_delete=models.CASCADE, unique=False) food = models.ForeignKey(SingleFood) - image = models.ImageField(upload_to='food/%Y/%m/%W', blank=True) + image = models.ImageField(upload_to='food/originals/%Y/%m/%W', blank=True) + thumbnail = models.ImageField(upload_to='food/thumbs/%Y/%m/%W', blank=True) class Meta: unique_together = ('user', 'food') def __str__(self): - return "User: %s - Rating: %s" % (self.user.username, str(self.image)) + return "User: %s - Image: %s" % (self.user.username, str(self.image)) + + def save(self, force_update=False, force_insert=False, thumb_size=(640, 480)): + image = Image.open(self.image) + + if image.mode not in ('L', 'RGB'): + image = image.convert('RGB') + image.thumbnail(thumb_size, Image.ANTIALIAS) + + # save the thumbnail to memory + temp_handle = BytesIO() + image.save(temp_handle, 'jpeg') + temp_handle.seek(0) # rewind the file + + # save to the thumbnail field + suf = SimpleUploadedFile(os.path.split(self.image.name)[-1], + temp_handle.read(), + content_type='image/jpg') + self.thumbnail.save('%s_thumbnail.%s' % (self.food.name, 'jpg'), suf, save=False) + # save the image object + self.image.name = "%s" % self.food.name + super(UserFoodImage, self).save(force_update, force_insert) + + def delete(self, using=None, keep_parents=False): + os.remove(os.path.join(settings.MEDIA_ROOT, self.image.name)) + os.remove(os.path.join(settings.MEDIA_ROOT, self.thumbnail.name)) + super(UserFoodImage, self).delete() diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index 78d7ae5..5aa30df 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals import datetime import os -from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponse from django.shortcuts import render @@ -138,7 +137,7 @@ def pic_upload(request, id): try: old_user_pic = UserFoodImage.objects.get(user=request.user, food=id) old_user_pic.delete() - os.remove(os.path.join(settings.MEDIA_ROOT, old_user_pic.image.name)) + except ObjectDoesNotExist: pass userPic = form.save(commit=False) diff --git a/ofu_app/templates/base.jinja b/ofu_app/templates/base.jinja index 52c9023..34b644b 100644 --- a/ofu_app/templates/base.jinja +++ b/ofu_app/templates/base.jinja @@ -40,7 +40,6 @@ {# ===== Body ===== #}
- {% block body %}