add food picture managament feature
This commit is contained in:
parent
b2565b2dc2
commit
a89da403ed
20
ofu_app/apps/donar/migrations/0010_auto_20180104_1905.py
Normal file
20
ofu_app/apps/donar/migrations/0010_auto_20180104_1905.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Generated by Django 2.0.1 on 2018-01-04 18:05
|
||||||
|
|
||||||
|
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(2018, 1, 4, 18, 5, 54, 971358, tzinfo=utc)),
|
||||||
|
),
|
||||||
|
]
|
||||||
39
ofu_app/apps/food/admin_views.py
Normal file
39
ofu_app/apps/food/admin_views.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
def food_picture_management(request):
|
||||||
|
if (request.user.is_superuser):
|
||||||
|
today = datetime.datetime.now()
|
||||||
|
today_images = UserFoodImage.objects.filter(food__foods__date__exact=today)
|
||||||
|
|
||||||
|
return render(request, "admin/picture_management.jinja", {
|
||||||
|
'day': today,
|
||||||
|
'pictures': today_images,
|
||||||
|
})
|
||||||
|
|
||||||
|
else:
|
||||||
|
return HttpResponseForbidden
|
||||||
|
|
||||||
|
|
||||||
|
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.save()
|
||||||
|
|
||||||
|
return food_picture_management(request)
|
||||||
|
else:
|
||||||
|
return HttpResponseForbidden
|
||||||
40
ofu_app/apps/food/migrations/0006_auto_20180104_1905.py
Normal file
40
ofu_app/apps/food/migrations/0006_auto_20180104_1905.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Generated by Django 2.0.1 on 2018-01-04 18:05
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('food', '0005_auto_20171204_1634'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='menu',
|
||||||
|
name='menu',
|
||||||
|
field=models.ManyToManyField(related_name='foods', to='food.SingleFood'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userfoodimage',
|
||||||
|
name='food',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='food.SingleFood'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userfoodimage',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userrating',
|
||||||
|
name='food',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='food.SingleFood'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userrating',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -60,8 +60,8 @@ class HappyHour(models.Model):
|
|||||||
|
|
||||||
class UserRating(models.Model):
|
class UserRating(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, unique=False)
|
user = models.ForeignKey(User, on_delete=models.PROTECT, unique=False)
|
||||||
food = models.ForeignKey(SingleFood)
|
food = models.ForeignKey(SingleFood, on_delete=models.PROTECT)
|
||||||
rating = models.FloatField(default=0)
|
rating = models.FloatField(default=0)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@ -70,8 +70,8 @@ class UserRating(models.Model):
|
|||||||
|
|
||||||
class UserFoodImage(models.Model):
|
class UserFoodImage(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, unique=False)
|
user = models.ForeignKey(User, on_delete=models.PROTECT, unique=False)
|
||||||
food = models.ForeignKey(SingleFood)
|
food = models.ForeignKey(SingleFood, on_delete=models.PROTECT)
|
||||||
image = models.ImageField(upload_to='food/%Y/%m/%W', blank=True)
|
image = models.ImageField(upload_to='food/%Y/%m/%W', blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@ -14,7 +14,7 @@ Including another URLconf
|
|||||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from apps.food import views
|
from apps.food import views, admin_views
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -35,4 +35,8 @@ urlpatterns = [
|
|||||||
# Food Rating
|
# Food Rating
|
||||||
url(r'^daily/rating/$', views.food_rating, name='rating-food'),
|
url(r'^daily/rating/$', views.food_rating, name='rating-food'),
|
||||||
url(r'^weekly/rating/$', views.food_rating, name='rating-food'),
|
url(r'^weekly/rating/$', views.food_rating, name='rating-food'),
|
||||||
|
|
||||||
|
# Admin Pages
|
||||||
|
url(r'^admin/$', admin_views.food_picture_management, name='foodpicture-management'),
|
||||||
|
url(r'^admin/(?P<id>[0-9]+)/$', admin_views.food_picture_save, name='foodpicture-save'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -71,7 +71,7 @@ def writeStudentenwerkDataInDB(data):
|
|||||||
try:
|
try:
|
||||||
date = datetime.strptime(str(menu['date']), "%d.%m.").replace(year=datetime.today().year)
|
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=data['name'], date=date)
|
||||||
menu.menu = foodlist
|
menu.menu.set(foodlist)
|
||||||
menu.save()
|
menu.save()
|
||||||
except IntegrityError as error:
|
except IntegrityError as error:
|
||||||
# ignored
|
# ignored
|
||||||
|
|||||||
@ -18,7 +18,7 @@ from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodIm
|
|||||||
def daily_food(request):
|
def daily_food(request):
|
||||||
today = datetime.datetime.now()
|
today = datetime.datetime.now()
|
||||||
start_week = today - datetime.timedelta(today.weekday())
|
start_week = today - datetime.timedelta(today.weekday())
|
||||||
end_week = start_week + datetime.timedelta(7)
|
end_week = start_week + datetime.timedelta(20)
|
||||||
|
|
||||||
feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Feldkirchenstraße").last()
|
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()
|
austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Austraße").last()
|
||||||
|
|||||||
20
ofu_app/templates/admin/picture_management.jinja
Normal file
20
ofu_app/templates/admin/picture_management.jinja
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{% extends 'food/food_wrapper.jinja' %}
|
||||||
|
{% import '/macros/food_macros.jinja' as macros %}
|
||||||
|
{% block headline %}
|
||||||
|
<h1 class="text-center">Food Picture Management View</h1>
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h2>Bilder</h2>
|
||||||
|
<div class="row">
|
||||||
|
{% for picture in pictures %}
|
||||||
|
<div class="col-6">
|
||||||
|
<a href="{{ url('foodpicture-save', kwargs={'id':picture.id}) }}">
|
||||||
|
<h3>{{ picture.food.name }}</h3>
|
||||||
|
<img src="{{ picture.image.url }}" style="width: 50%">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@ -15,4 +15,4 @@
|
|||||||
{{ macros.home_item_with_icon(icon='fa-th-large', url_id='links-home', title='Links') }}
|
{{ macros.home_item_with_icon(icon='fa-th-large', url_id='links-home', title='Links') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}fa-cutlery
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user