From bc0b742305ba243c7707ce297088594869be3e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Thu, 11 Jan 2018 09:22:23 +0100 Subject: [PATCH 1/7] Fix weekly bug --- ofu_app/apps/food/models.py | 5 +++-- ofu_app/apps/food/views.py | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 20e2fb0..e4ed81b 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -106,10 +106,11 @@ class UserFoodImage(models.Model): suf = SimpleUploadedFile(os.path.split(self.image.name)[-1], temp_handle.read(), content_type='image/jpg') + # TODO: Fix it str_food = smart_text(self.food.name, encoding='utf-8') - self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.username, 'jpg'), suf, save=False) + self.thumb.save('%s_thumbnail.%s' % (self.food.id, 'jpg'), suf, save=False) # save the image object - self.image.name = "%s_%s_original.%s" % (str_food, self.user.username, 'jpg') + self.image.name = "%s_%s_original.%s" % (self.food.id, 'jpg') super(UserFoodImage, self).save(force_update, force_insert) def delete(self, using=None, keep_parents=False): diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index 64f7417..9e6719c 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -17,7 +17,7 @@ from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodIm def daily_food(request): today = datetime.datetime.now() start_week = today - datetime.timedelta(today.weekday()) - end_week = start_week + datetime.timedelta(20) + end_week = start_week + datetime.timedelta(7) feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Feldkirchenstraße").last() austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Austraße").last() @@ -135,6 +135,8 @@ def pic_upload(request, id): form = UploadImageForm(request.POST, request.FILES) if form.is_valid(): try: + food = SingleFood.objects.get(food=id) + food.image.clear old_user_pic = UserFoodImage.objects.get(user=request.user, food=id) old_user_pic.delete() From f35364d02c3ea6998d4f9d55e05775e27cbb4a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Thu, 11 Jan 2018 11:52:15 +0100 Subject: [PATCH 2/7] Update location handling --- ofu_app/apps/donar/models.py | 2 +- .../migrations/0003_auto_20180111_1114.py | 20 +++++++++++++++++++ ofu_app/apps/food/models.py | 6 +++++- ofu_app/apps/food/utils/migrate_data.py | 16 +++++++++++++-- ofu_app/apps/food/views.py | 2 +- 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 ofu_app/apps/food/migrations/0003_auto_20180111_1114.py diff --git a/ofu_app/apps/donar/models.py b/ofu_app/apps/donar/models.py index d88ea27..9b94e33 100644 --- a/ofu_app/apps/donar/models.py +++ b/ofu_app/apps/donar/models.py @@ -48,7 +48,7 @@ class Lecture(models.Model): class Lecture_Terms(models.Model): id = models.AutoField(primary_key=True) - starttime = models.TimeField(blank=False, default=timezone.now()) + starttime = models.TimeField(blank=False) room = models.ManyToManyField('Room', blank=True) def __str__(self): diff --git a/ofu_app/apps/food/migrations/0003_auto_20180111_1114.py b/ofu_app/apps/food/migrations/0003_auto_20180111_1114.py new file mode 100644 index 0000000..f7ba76b --- /dev/null +++ b/ofu_app/apps/food/migrations/0003_auto_20180111_1114.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2018-01-11 10:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0002_auto_20180105_1449'), + ] + + operations = [ + migrations.AlterField( + model_name='menu', + name='location', + field=models.CharField(choices=[('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')], max_length=60), + ), + ] diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 20e2fb0..7f69267 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -11,15 +11,19 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.db import models from django.utils import timezone from django.utils.encoding import smart_text +from enum import Enum MAX_LENGTH = 60 +LOCATION_CHOICES = ( +('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')) + # Create your models here. class Menu(models.Model): id = models.AutoField(primary_key=True) date = models.DateField(default=timezone.now) - location = models.CharField(max_length=MAX_LENGTH) + location = models.CharField(max_length=MAX_LENGTH, choices=LOCATION_CHOICES) menu = models.ManyToManyField("SingleFood", related_name="foods") class Meta: diff --git a/ofu_app/apps/food/utils/migrate_data.py b/ofu_app/apps/food/utils/migrate_data.py index 027e469..a1dffa7 100644 --- a/ofu_app/apps/food/utils/migrate_data.py +++ b/ofu_app/apps/food/utils/migrate_data.py @@ -2,7 +2,7 @@ import json from datetime import datetime from pprint import pprint from django.db.utils import IntegrityError -from apps.food.models import SingleFood, Menu, HappyHour, Allergene +from apps.food.models import SingleFood, Menu, HappyHour, Allergene, LOCATION_CHOICES from apps.food.utils.parser import mensa_page_parser, fekide_happyhour_page_parser, cafete_page_parser # CONFIG SERVICE LINKS @@ -12,12 +12,23 @@ LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html" LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour" +LOCATION_NAMES = ('erba', 'markusplatz', 'feldkirchenstraße', 'austraße') + def getJsonFromFile(path): with open(path, "r") as file: return json.load(file) +def getLocation(raw_loc): + for choice, name in zip(LOCATION_CHOICES, LOCATION_NAMES): + print(name.upper() in str(raw_loc).upper()) + if (name.upper() in str(raw_loc).upper()): + return choice + + print("LOCATION NOT FOUND") + + def writeStudentenwerkDataInDB(data): data = json.loads(data) pprint(data) @@ -69,8 +80,9 @@ def writeStudentenwerkDataInDB(data): db_single_food.allergens = allergens foodlist.append(db_single_food) try: + date = datetime.strptime(str(menu['date']), "%d.%m.").replace(year=datetime.today().year) - menu = Menu.objects.create(location=data['name'], date=date) + menu = Menu.objects.create(location=getLocation(data['name']), date=date) menu.menu.set(foodlist) menu.save() except IntegrityError as error: diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index 64f7417..5aa30df 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -17,7 +17,7 @@ from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodIm def daily_food(request): today = datetime.datetime.now() start_week = today - datetime.timedelta(today.weekday()) - end_week = start_week + datetime.timedelta(20) + end_week = start_week + datetime.timedelta(7) feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Feldkirchenstraße").last() austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Austraße").last() From bdc6d36ce4fcadec5479abe6d19c95421ad568b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Jan 2018 23:13:54 +0100 Subject: [PATCH 3/7] Fix location choices bug --- .../migrations/0003_auto_20180111_1246.py | 20 +++++++++ ofu_app/apps/food/api/serializers.py | 1 + ofu_app/apps/food/api/urls.py | 5 ++- ofu_app/apps/food/api/views.py | 44 +++++++++---------- .../migrations/0004_auto_20180111_1246.py | 40 +++++++++++++++++ ofu_app/apps/food/models.py | 12 +++-- ofu_app/apps/food/utils/migrate_data.py | 4 +- ofu_app/apps/food/views.py | 16 +++---- 8 files changed, 102 insertions(+), 40 deletions(-) create mode 100644 ofu_app/apps/donar/migrations/0003_auto_20180111_1246.py create mode 100644 ofu_app/apps/food/migrations/0004_auto_20180111_1246.py diff --git a/ofu_app/apps/donar/migrations/0003_auto_20180111_1246.py b/ofu_app/apps/donar/migrations/0003_auto_20180111_1246.py new file mode 100644 index 0000000..f54c8f5 --- /dev/null +++ b/ofu_app/apps/donar/migrations/0003_auto_20180111_1246.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2018-01-11 11:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('donar', '0002_auto_20180105_1449'), + ] + + operations = [ + migrations.AlterField( + model_name='lecture_terms', + name='starttime', + field=models.TimeField(), + ), + ] diff --git a/ofu_app/apps/food/api/serializers.py b/ofu_app/apps/food/api/serializers.py index 958bde6..19cd1c8 100644 --- a/ofu_app/apps/food/api/serializers.py +++ b/ofu_app/apps/food/api/serializers.py @@ -27,6 +27,7 @@ class SingleFoodSerializer(serializers.HyperlinkedModelSerializer): class MenuSerializer(serializers.HyperlinkedModelSerializer): date = serializers.DateField(format='iso-8601') menu = SingleFoodSerializer(many=True, read_only=True) + location = serializers.ChoiceField(choices=Menu.LOCATION_CHOICES) class Meta: model = Menu diff --git a/ofu_app/apps/food/api/urls.py b/ofu_app/apps/food/api/urls.py index 8ed5ff1..5cd1457 100644 --- a/ofu_app/apps/food/api/urls.py +++ b/ofu_app/apps/food/api/urls.py @@ -15,16 +15,17 @@ Including another URLconf """ from django.conf.urls import url from apps.food.api import views as api_views +from apps.food.models import Menu urlpatterns = [ # API Version 1.1 url(r'^food/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), - url(r'^food/(?Pfeldkirchenstrasse|markusstrasse|erba|austrasse)/$', + url(r'^food/(?P' + Menu.FEKI + '|' + Menu.MARKUSPLATZ + '|' + Menu.ERBA + '|' + Menu.AUSTRASSE + ')/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), url(r'food/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), url( - r'food/(?Pfeldkirchenstrasse|markusstrasse|erba|austrasse)/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$', + r'food/(?P' + Menu.FEKI + '|' + Menu.MARKUSPLATZ + '|' + Menu.ERBA + '|' + Menu.AUSTRASSE + ')/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), url(r'food/today/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), url(r'food/week/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})), diff --git a/ofu_app/apps/food/api/views.py b/ofu_app/apps/food/api/views.py index 93cfa9d..5ec88f1 100644 --- a/ofu_app/apps/food/api/views.py +++ b/ofu_app/apps/food/api/views.py @@ -25,18 +25,17 @@ class FoodViewSet(viewsets.ModelViewSet, ): queryset = Menu.objects.all() location = self.request.query_params.get('location') date = self.request.query_params.get('date') - + print(str(location).upper() == Menu.ERBA.upper()) if location: - locations = ["erba", "feldkirchenstrasse", "austrasse", "markusplatz"] - if locations.__contains__(location): - if location == locations[0]: - queryset = queryset.filter(location__contains="Erba") - elif location == locations[1]: - queryset = queryset.filter(location__contains="Feldkirchen") - elif location == locations[2]: - queryset = queryset.filter(location__contains="austraße") - elif location == locations[3]: - queryset = queryset.filter(location__contains="markusplatz") + print(str(location).upper() == Menu.ERBA.upper()) + if str(location).upper() is Menu.ERBA.upper(): + queryset = queryset.filter(location_contains='Erba') + elif str(location).upper() is Menu.FEKI.upper(): + queryset = queryset.filter(location=Menu.FEKI) + elif str(location).upper() is Menu.AUSTRASSE.upper(): + queryset = queryset.filter(location=Menu.AUSTRASSE) + elif str(location).upper() is Menu.MARKUSPLATZ.upper(): + queryset = queryset.filter(location=Menu.MARKUSPLATZ) if date: if date == "week": today = datetime.now() @@ -82,19 +81,16 @@ class FoodViewSetV1_1(viewsets.ModelViewSet, ): day = self.kwargs['day'] if location: - # TODO better way to get location list - locations = ["erba", "feldkirchenstrasse", "austrasse", "markusstrasse"] - if locations.__contains__(location): - print("Location: " + str(location)) - if location == locations[0]: - queryset = queryset.filter(location__contains="Erba") - elif location == locations[1]: - queryset = queryset.filter(location__contains="Feldkirchen") - elif location == locations[2]: - queryset = queryset.filter(location__contains="Austraße") - elif location == locations[3]: - queryset = queryset.filter(location__contains="Markusplatz") - + if str(location).upper() == Menu.ERBA.upper(): + queryset = queryset.filter(location__contains=Menu.ERBA) + elif str(location).upper() == Menu.FEKI.upper(): + queryset = queryset.filter(location__contains=Menu.FEKI) + elif str(location).upper() == Menu.AUSTRASSE.upper(): + print("Before: " + str(queryset)) + queryset = queryset.filter(location__contains=Menu.AUSTRASSE) + elif str(location).upper() == Menu.MARKUSPLATZ.upper(): + queryset = queryset.filter(location__contains=Menu.MARKUSPLATZ) + print(queryset) if year and month and day: date = '%s-%s-%s' % (year, month, day) queryset = queryset.filter(date=datetime.strptime(date, '%Y-%m-%d')) diff --git a/ofu_app/apps/food/migrations/0004_auto_20180111_1246.py b/ofu_app/apps/food/migrations/0004_auto_20180111_1246.py new file mode 100644 index 0000000..fd91cb6 --- /dev/null +++ b/ofu_app/apps/food/migrations/0004_auto_20180111_1246.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2018-01-11 11:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0003_auto_20180111_1114'), + ] + + operations = [ + migrations.AlterField( + model_name='allergene', + name='name', + field=models.CharField(max_length=256, unique=True), + ), + migrations.AlterField( + model_name='happyhour', + name='description', + field=models.CharField(max_length=256), + ), + migrations.AlterField( + model_name='happyhour', + name='location', + field=models.CharField(max_length=256), + ), + migrations.AlterField( + model_name='menu', + name='location', + field=models.CharField(choices=[('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')], max_length=256), + ), + migrations.AlterField( + model_name='singlefood', + name='name', + field=models.CharField(max_length=256, unique=True), + ), + ] diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 7f69267..7e8c1cd 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -13,14 +13,18 @@ from django.utils import timezone from django.utils.encoding import smart_text from enum import Enum -MAX_LENGTH = 60 - -LOCATION_CHOICES = ( -('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')) +MAX_LENGTH = 256 # Create your models here. class Menu(models.Model): + ERBA = 'ERBA' + MARKUSPLATZ = 'MARKUSPLATZ' + FEKI = 'FEKI' + AUSTRASSE = 'AUSTRASSE' + + LOCATION_CHOICES = ( + (ERBA, 'Erba'), (MARKUSPLATZ, 'Markusplatz'), (FEKI, 'Feldkirchenstrasse'), (AUSTRASSE, 'Austrasse')) id = models.AutoField(primary_key=True) date = models.DateField(default=timezone.now) location = models.CharField(max_length=MAX_LENGTH, choices=LOCATION_CHOICES) diff --git a/ofu_app/apps/food/utils/migrate_data.py b/ofu_app/apps/food/utils/migrate_data.py index a1dffa7..0b50d69 100644 --- a/ofu_app/apps/food/utils/migrate_data.py +++ b/ofu_app/apps/food/utils/migrate_data.py @@ -2,7 +2,7 @@ import json from datetime import datetime from pprint import pprint from django.db.utils import IntegrityError -from apps.food.models import SingleFood, Menu, HappyHour, Allergene, LOCATION_CHOICES +from apps.food.models import SingleFood, Menu, HappyHour, Allergene from apps.food.utils.parser import mensa_page_parser, fekide_happyhour_page_parser, cafete_page_parser # CONFIG SERVICE LINKS @@ -21,7 +21,7 @@ def getJsonFromFile(path): def getLocation(raw_loc): - for choice, name in zip(LOCATION_CHOICES, LOCATION_NAMES): + for choice, name in zip(Menu.LOCATION_CHOICES, LOCATION_NAMES): print(name.upper() in str(raw_loc).upper()) if (name.upper() in str(raw_loc).upper()): return choice diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index 5aa30df..566fb6a 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -19,17 +19,17 @@ def daily_food(request): start_week = today - datetime.timedelta(today.weekday()) end_week = start_week + datetime.timedelta(7) - feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Feldkirchenstraße").last() - austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Austraße").last() - erba_cafete = Menu.objects.filter(date__exact=today).filter(location__contains="Erba").last() - markus_cafete = Menu.objects.filter(date__exact=today).filter(location__contains="markus").last() + feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.FEKI).last() + austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.AUSTRASSE).last() + erba_cafete = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.ERBA).last() + markus_cafete = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.MARKUSPLATZ).last() happy_hours = HappyHour.objects.filter(date__exact=today) weekly_menus = Menu.objects.filter(date__gte=start_week, date__lte=end_week) - weekly_feki_menu = weekly_menus.filter(location__contains="Feldkirchenstraße") - weekly_austr_menu = weekly_menus.filter(location__contains="Austraße") - weekly_erba_cafete = weekly_menus.filter(location__contains="Erba") - weekly_markus_cafete = weekly_menus.filter(location__contains="markus") + weekly_feki_menu = weekly_menus.filter(location__contains=Menu.FEKI) + weekly_austr_menu = weekly_menus.filter(location__contains=Menu.AUSTRASSE) + weekly_erba_cafete = weekly_menus.filter(location__contains=Menu.ERBA) + weekly_markus_cafete = weekly_menus.filter(location__contains=Menu.MARKUSPLATZ) return render(request, "food/daily_food.jinja", { 'day': today, From a93859167ab6d0cc00b8d7a2b017e0b8aa12e14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Jan 2018 23:24:27 +0100 Subject: [PATCH 4/7] Update picture upload --- ofu_app/apps/food/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 7e8c1cd..2cd872c 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -10,7 +10,7 @@ from django.contrib.auth.models import User from django.core.files.uploadedfile import SimpleUploadedFile from django.db import models from django.utils import timezone -from django.utils.encoding import smart_text +from django.utils.encoding import smart_str from enum import Enum MAX_LENGTH = 256 @@ -114,7 +114,7 @@ class UserFoodImage(models.Model): suf = SimpleUploadedFile(os.path.split(self.image.name)[-1], temp_handle.read(), content_type='image/jpg') - str_food = smart_text(self.food.name, encoding='utf-8') + str_food = smart_str(self.food.name, encoding='utf-8') self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.username, 'jpg'), suf, save=False) # save the image object self.image.name = "%s_%s_original.%s" % (str_food, self.user.username, 'jpg') From 0ce1b2edbccc4a2b3d8f652113113ca0ac686295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Jan 2018 23:53:01 +0100 Subject: [PATCH 5/7] Fix shity bugs --- ofu_app/apps/food/models.py | 4 ++-- ofu_app/apps/food/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 941e1c2..c280761 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -115,9 +115,9 @@ class UserFoodImage(models.Model): content_type='image/jpg') str_food = smart_str(self.food.name, encoding='utf-8') - self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.username, 'jpg'), suf, save=False) + self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.id, 'jpg'), suf, save=False) # save the image object - self.image.name = "%s_%s_original.%s" % (self.food.id, 'jpg') + self.image.name = "%s_%s_original.%s" % (str_food, self.user.id, 'jpg') super(UserFoodImage, self).save(force_update, force_insert) def delete(self, using=None, keep_parents=False): diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index affa0b9..c05b446 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -135,7 +135,7 @@ def pic_upload(request, id): form = UploadImageForm(request.POST, request.FILES) if form.is_valid(): try: - food = SingleFood.objects.get(food=id) + food = SingleFood.objects.get(id=id) food.image.clear old_user_pic = UserFoodImage.objects.get(user=request.user, food=id) old_user_pic.delete() From fed22f53a12076753c38a695e32cfaeb9b85c1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Jan 2018 23:55:15 +0100 Subject: [PATCH 6/7] Change file food names to food_ids --- ofu_app/apps/food/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index c280761..474d59e 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -115,9 +115,9 @@ class UserFoodImage(models.Model): content_type='image/jpg') str_food = smart_str(self.food.name, encoding='utf-8') - self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.id, 'jpg'), suf, save=False) + self.thumb.save('%s_%s_thumbnail.%s' % (self.food.id, self.user.id, 'jpg'), suf, save=False) # save the image object - self.image.name = "%s_%s_original.%s" % (str_food, self.user.id, 'jpg') + self.image.name = "%s_%s_original.%s" % (self.food.id, self.user.id, 'jpg') super(UserFoodImage, self).save(force_update, force_insert) def delete(self, using=None, keep_parents=False): From b87f6ac56b8032e6d3646b5a3e4526e4e2e07b5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Sat, 13 Jan 2018 02:09:00 +0100 Subject: [PATCH 7/7] Fix image hack --- ofu_app/apps/food/admin_views.py | 8 +--- ofu_app/apps/food/forms.py | 4 +- .../migrations/0005_auto_20180113_0023.py | 42 +++++++++++++++++++ .../migrations/0006_auto_20180113_0121.py | 25 +++++++++++ ofu_app/apps/food/models.py | 21 ++++++---- ofu_app/apps/food/views.py | 18 ++------ .../templates/admin/picture_management.jinja | 2 +- ofu_app/templates/food/detailed_food.jinja | 2 +- ofu_app/templates/macros/food_macros.jinja | 12 +++--- 9 files changed, 94 insertions(+), 40 deletions(-) create mode 100644 ofu_app/apps/food/migrations/0005_auto_20180113_0023.py create mode 100644 ofu_app/apps/food/migrations/0006_auto_20180113_0121.py diff --git a/ofu_app/apps/food/admin_views.py b/ofu_app/apps/food/admin_views.py index 87e03c9..ff8aae6 100644 --- a/ofu_app/apps/food/admin_views.py +++ b/ofu_app/apps/food/admin_views.py @@ -2,15 +2,11 @@ from __future__ import unicode_literals import datetime -import os -from django.conf import settings -from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponseForbidden from django.shortcuts import render -from pprint import pprint -from apps.food.models import Menu, SingleFood, UserFoodImage +from apps.food.models import SingleFood, UserFoodImage def food_picture_management(request): @@ -31,7 +27,7 @@ def food_picture_save(request, id): if (request.user.is_superuser): chosen_pic = UserFoodImage.objects.get(id=id) food = SingleFood.objects.get(id=chosen_pic.food.id) - food.image.set([chosen_pic, ]) + food.image = chosen_pic.image food.save() return food_picture_management(request) diff --git a/ofu_app/apps/food/forms.py b/ofu_app/apps/food/forms.py index b451c76..7b2b59e 100644 --- a/ofu_app/apps/food/forms.py +++ b/ofu_app/apps/food/forms.py @@ -1,8 +1,8 @@ from django import forms -from apps.food.models import UserFoodImage +from apps.food.models import FoodImage class UploadImageForm(forms.ModelForm): class Meta: - model = UserFoodImage + model = FoodImage fields = ['image'] diff --git a/ofu_app/apps/food/migrations/0005_auto_20180113_0023.py b/ofu_app/apps/food/migrations/0005_auto_20180113_0023.py new file mode 100644 index 0000000..a37a198 --- /dev/null +++ b/ofu_app/apps/food/migrations/0005_auto_20180113_0023.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2018-01-12 23:23 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0004_auto_20180111_1246'), + ] + + operations = [ + migrations.CreateModel( + name='FoodImage', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('image', models.ImageField(blank=True, upload_to='food/originals/%Y/%m/%W')), + ('thumb', models.ImageField(blank=True, upload_to='food/thumbs/%Y/%m/%W')), + ], + ), + migrations.RemoveField( + model_name='userfoodimage', + name='thumb', + ), + migrations.RemoveField( + model_name='singlefood', + name='image', + ), + migrations.AlterField( + model_name='userfoodimage', + name='image', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='food.FoodImage'), + ), + migrations.AddField( + model_name='singlefood', + name='image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='food.FoodImage'), + ), + ] diff --git a/ofu_app/apps/food/migrations/0006_auto_20180113_0121.py b/ofu_app/apps/food/migrations/0006_auto_20180113_0121.py new file mode 100644 index 0000000..8526575 --- /dev/null +++ b/ofu_app/apps/food/migrations/0006_auto_20180113_0121.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2018-01-13 00:21 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0005_auto_20180113_0023'), + ] + + operations = [ + migrations.AlterField( + model_name='foodimage', + name='image', + field=models.ImageField(blank=True, null=True, upload_to='food/originals/%Y/%m/%W'), + ), + migrations.AlterField( + model_name='foodimage', + name='thumb', + field=models.ImageField(blank=True, null=True, upload_to='food/thumbs/%Y/%m/%W'), + ), + ] diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index 474d59e..c393014 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -10,7 +10,6 @@ from django.contrib.auth.models import User from django.core.files.uploadedfile import SimpleUploadedFile from django.db import models from django.utils import timezone -from django.utils.encoding import smart_str MAX_LENGTH = 256 @@ -42,7 +41,7 @@ class SingleFood(models.Model): price_student = models.CharField(max_length=10, blank=True, null=True) price_employee = models.CharField(max_length=10, blank=True, null=True) price_guest = models.CharField(max_length=10, blank=True, null=True) - image = models.ManyToManyField("UserFoodImage", blank=True, null=True) + image = models.ForeignKey('FoodImage', on_delete=models.PROTECT, blank=True, null=True) rating = models.FloatField(default=0) allergens = models.ManyToManyField("Allergene", blank=True) @@ -88,8 +87,7 @@ class UserFoodImage(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(User, on_delete=models.PROTECT, unique=False) food = models.ForeignKey(SingleFood, on_delete=models.PROTECT) - image = models.ImageField(upload_to='food/originals/%Y/%m/%W', blank=True) - thumb = models.ImageField(upload_to='food/thumbs/%Y/%m/%W', blank=True) + image = models.ForeignKey('FoodImage', on_delete=models.PROTECT) class Meta: unique_together = ('user', 'food') @@ -97,6 +95,12 @@ class UserFoodImage(models.Model): def __str__(self): return "User: %s - Image: %s" % (self.user.username, str(self.image)) + +class FoodImage(models.Model): + id = models.AutoField(primary_key=True) + image = models.ImageField(upload_to='food/originals/%Y/%m/%W', blank=True, null=True) + thumb = models.ImageField(upload_to='food/thumbs/%Y/%m/%W', blank=True, null=True) + def save(self, force_update=False, force_insert=False, thumb_size=(640, 480)): image = Image.open(self.image) @@ -114,13 +118,12 @@ class UserFoodImage(models.Model): temp_handle.read(), content_type='image/jpg') - str_food = smart_str(self.food.name, encoding='utf-8') - self.thumb.save('%s_%s_thumbnail.%s' % (self.food.id, self.user.id, 'jpg'), suf, save=False) + self.thumb.save('%s_thumbnail.%s' % (self.id, 'jpg'), suf, save=False) # save the image object - self.image.name = "%s_%s_original.%s" % (self.food.id, self.user.id, 'jpg') - super(UserFoodImage, self).save(force_update, force_insert) + self.image.name = "%s_original.%s" % (self.id, 'jpg') + super(FoodImage, 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.thumb.name)) - super(UserFoodImage, self).delete() + super(FoodImage, self).delete() diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index c05b446..afe2a32 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -2,15 +2,12 @@ from __future__ import unicode_literals import datetime -import os -from django.core.exceptions import ObjectDoesNotExist from django.http import HttpResponse from django.shortcuts import render -from pprint import pprint from apps.food.forms import UploadImageForm -from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodImage +from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodImage, FoodImage # Create your views here. @@ -134,17 +131,10 @@ def food_image(request): def pic_upload(request, id): form = UploadImageForm(request.POST, request.FILES) if form.is_valid(): - try: - food = SingleFood.objects.get(id=id) - food.image.clear - old_user_pic = UserFoodImage.objects.get(user=request.user, food=id) - old_user_pic.delete() - - except ObjectDoesNotExist: - pass - userPic = form.save(commit=False) + pic = form.save(commit=True) + userPic, success = UserFoodImage.objects.get_or_create(user_id=request.user) + userPic.image = pic userPic.food = SingleFood.objects.get(id=id) - userPic.user = request.user userPic.save() return True else: diff --git a/ofu_app/templates/admin/picture_management.jinja b/ofu_app/templates/admin/picture_management.jinja index cc6af24..6c70839 100644 --- a/ofu_app/templates/admin/picture_management.jinja +++ b/ofu_app/templates/admin/picture_management.jinja @@ -11,7 +11,7 @@ {% endfor %} diff --git a/ofu_app/templates/food/detailed_food.jinja b/ofu_app/templates/food/detailed_food.jinja index cb2a53a..6d20ae0 100644 --- a/ofu_app/templates/food/detailed_food.jinja +++ b/ofu_app/templates/food/detailed_food.jinja @@ -46,7 +46,7 @@ {% for image in images %}

{{ image.food.name }}

- +
{% endfor %} diff --git a/ofu_app/templates/macros/food_macros.jinja b/ofu_app/templates/macros/food_macros.jinja index 04a34e1..76fda35 100644 --- a/ofu_app/templates/macros/food_macros.jinja +++ b/ofu_app/templates/macros/food_macros.jinja @@ -60,13 +60,11 @@
  • {# TODO: without many to many #} - {% if single_food.image.all() %} - {% for image in single_food.image.all() %} - - Bild - - {% endfor %} + {% if single_food.image %} + + Bild + {% else %}