Added data, forms, and models.

main
zb0xa1 2 years ago
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,43 +1,53 @@
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):
try:
return {
'Student': self.price.split(' / ')[0],
'Employee': self.price.split(' / ')[1],
'Guest': self.price.split(' / ')[2],
}
except IndexError:
return { return {
'Student': self.price.split(' / ')[0] or 0, 'Student': "0,00 €",
'Employee': self.price.split(' / ')[1] or 0, 'Employee': "0,00 €",
'Guest': self.price.split(' / ')[2] or 0, 'Guest': "0,00 €",
} }
@property @property
@ -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)
author = models.CharField(max_length=144, default='anon')
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) 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) title = models.CharField(max_length=144, blank=True)
text = models.TextField(null=True, blank=True)

Loading…
Cancel
Save