mirror of
https://github.com/HS-Flensburg-Klein/hausarbeit-hikmat_galan_neumann_stark_becker
synced 2025-04-04 21:43:31 +00:00
Added data, forms, and models.
This commit is contained in:
parent
4579880d47
commit
7893cbcb6f
@ -1,4 +1,31 @@
|
|||||||
STATUS_VALUES = ['Student', 'Employee', 'Guest']
|
STATUS_VALUES = ['Student', 'Employee', 'Guest']
|
||||||
|
ALLERGENS = {
|
||||||
|
'Ei': 'Ei',
|
||||||
|
'En': 'Erdnüsse',
|
||||||
|
'Fi': 'Fisch',
|
||||||
|
'Gl': 'Glutenhaltiges Getreide',
|
||||||
|
'GlD': 'Dinkel',
|
||||||
|
'GlG': 'Gerste',
|
||||||
|
'GlH': 'Hafer',
|
||||||
|
'GlR': 'Roggen',
|
||||||
|
'GlW': 'Weizen',
|
||||||
|
'Kr': 'Krebstiere',
|
||||||
|
'Lac': 'Laktose',
|
||||||
|
'Lu': 'Lupinen',
|
||||||
|
'Mi': 'Milch',
|
||||||
|
'Sc': 'Schalenfrüchte',
|
||||||
|
'ScC': 'Cashews',
|
||||||
|
'ScH': 'Haselnüsse',
|
||||||
|
'ScM': 'Mandeln',
|
||||||
|
'ScP': 'Pistazien',
|
||||||
|
'ScW': 'Walnüsse',
|
||||||
|
'Se': 'Sesam',
|
||||||
|
'Sf': 'Senf',
|
||||||
|
'Sl': 'Sellerie',
|
||||||
|
'So': 'Soja',
|
||||||
|
'Sw': 'Schwefeldioxid / Sulphite',
|
||||||
|
'Wt': 'Weichtiere',
|
||||||
|
}
|
||||||
TYPES = {
|
TYPES = {
|
||||||
'vn': 'Vegan',
|
'vn': 'Vegan',
|
||||||
've': 'Vegetarisch',
|
've': 'Vegetarisch',
|
||||||
@ -14,3 +41,6 @@ TYPES = {
|
|||||||
'AGG': 'Artgerechtes Geflügel',
|
'AGG': 'Artgerechtes Geflügel',
|
||||||
'AGL': 'Artgerechtes Lamm',
|
'AGL': 'Artgerechtes Lamm',
|
||||||
}
|
}
|
||||||
|
ALLERGENS_CHOICES = ((key, ALLERGENS[key]) for key in ALLERGENS)
|
||||||
|
TYPES_CHOICES = ((key, TYPES[key]) for key in TYPES)
|
||||||
|
ART_CHOICES = (('Mensa', 'Mensa'), ('Cafeteria', 'Cafeteria'))
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
|
from .data import TYPES_CHOICES, ALLERGENS_CHOICES
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
|
|
||||||
class CommentForm(forms.ModelForm):
|
class MenuForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Comment
|
model = Menu
|
||||||
fields = '__all__'
|
fields = ['art', 'name', 'price', 'allergens', 'types', 'day']
|
||||||
|
widgets = {
|
||||||
|
'types': forms.CheckboxSelectMultiple(choices=TYPES_CHOICES),
|
||||||
|
'allergens': forms.CheckboxSelectMultiple(choices=ALLERGENS_CHOICES),
|
||||||
|
'day': forms.DateInput(attrs={'type': 'date'}, format="%d.%m.%Y"),
|
||||||
|
}
|
||||||
|
@ -1,44 +1,54 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
from .data import TYPES
|
from .data import TYPES, ART_CHOICES
|
||||||
|
|
||||||
|
|
||||||
class Day(models.Model):
|
|
||||||
date = models.DateField(null=True, blank=True)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return str(self.date)
|
|
||||||
|
|
||||||
|
|
||||||
class Location(models.Model):
|
class Location(models.Model):
|
||||||
|
city = models.CharField(max_length=144, null=True, blank=True)
|
||||||
name = models.CharField(max_length=144, null=True, blank=True)
|
name = models.CharField(max_length=144, null=True, blank=True)
|
||||||
mensa_id = models.CharField(max_length=2, null=True, blank=True)
|
mensa_id = models.CharField(max_length=2, null=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return f"{self.city} - {self.name} [{self.mensa_id}]"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def menus(self):
|
||||||
|
return [menu for menu in Menu.objects.filter(location=self)]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def news_articles(self):
|
||||||
|
return [news_article for news_article in NewsArticle.objects.filter(location=self)]
|
||||||
|
|
||||||
|
|
||||||
class Menu(models.Model):
|
class Menu(models.Model):
|
||||||
art = models.CharField(max_length=144, null=True, blank=True)
|
art = models.CharField(max_length=24, choices=ART_CHOICES, default='M')
|
||||||
name = models.CharField(max_length=144, null=True, blank=True)
|
name = models.CharField(max_length=144, default='---', blank=True)
|
||||||
price = models.CharField(max_length=144, null=True, blank=True)
|
price = models.CharField(max_length=144, default='---', blank=True)
|
||||||
allergens = models.JSONField(null=True, blank=True)
|
allergens = models.JSONField(default=list, blank=True)
|
||||||
types = models.JSONField(null=True, blank=True)
|
types = models.JSONField(default=list, blank=True)
|
||||||
|
day = models.DateField(null=True, blank=True)
|
||||||
likes = models.IntegerField(default=0)
|
likes = models.IntegerField(default=0)
|
||||||
locations = models.ManyToManyField(Location)
|
location = models.ForeignKey(Location, on_delete=models.CASCADE, null=True,
|
||||||
days = models.ManyToManyField(Day)
|
blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return f"{self.name}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get_price(self):
|
def get_price(self):
|
||||||
return {
|
try:
|
||||||
'Student': self.price.split(' / ')[0] or 0,
|
return {
|
||||||
'Employee': self.price.split(' / ')[1] or 0,
|
'Student': self.price.split(' / ')[0],
|
||||||
'Guest': self.price.split(' / ')[2] or 0,
|
'Employee': self.price.split(' / ')[1],
|
||||||
}
|
'Guest': self.price.split(' / ')[2],
|
||||||
|
}
|
||||||
|
except IndexError:
|
||||||
|
return {
|
||||||
|
'Student': "0,00 €",
|
||||||
|
'Employee': "0,00 €",
|
||||||
|
'Guest': "0,00 €",
|
||||||
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get_types(self):
|
def get_types(self):
|
||||||
@ -50,11 +60,19 @@ class Menu(models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def comments(self):
|
def comments(self):
|
||||||
return [comment for comment in Comment.objects.filter(related_menu=self)]
|
return [comment for comment in Comment.objects.filter(menu=self)]
|
||||||
|
|
||||||
|
|
||||||
class Comment(models.Model):
|
class Comment(models.Model):
|
||||||
related_menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
|
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
|
||||||
timestamp = models.DateTimeField(default=now, blank=True)
|
timestamp = models.DateTimeField(default=now, blank=True)
|
||||||
username = models.CharField(max_length=144, default='anon')
|
author = models.CharField(max_length=144, default='anon')
|
||||||
comment = models.CharField(max_length=720)
|
text = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
|
class NewsArticle(models.Model):
|
||||||
|
location = models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||||
|
timestamp = models.DateTimeField(default=now, blank=True)
|
||||||
|
author = models.CharField(max_length=144, default='anon')
|
||||||
|
title = models.CharField(max_length=144, blank=True)
|
||||||
|
text = models.TextField(null=True, blank=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user