mirror of
https://github.com/HS-Flensburg-Klein/hausarbeit-hikmat_galan_neumann_stark_becker
synced 2025-02-20 19:13: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']
|
||||
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 = {
|
||||
'vn': 'Vegan',
|
||||
've': 'Vegetarisch',
|
||||
@ -14,3 +41,6 @@ TYPES = {
|
||||
'AGG': 'Artgerechtes Geflügel',
|
||||
'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 .models import *
|
||||
from .data import TYPES_CHOICES, ALLERGENS_CHOICES
|
||||
|
||||
from datetime import date
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
class MenuForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = '__all__'
|
||||
model = Menu
|
||||
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.utils.timezone import now
|
||||
|
||||
from .data import TYPES
|
||||
|
||||
|
||||
class Day(models.Model):
|
||||
date = models.DateField(null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.date)
|
||||
from .data import TYPES, ART_CHOICES
|
||||
|
||||
|
||||
class Location(models.Model):
|
||||
city = 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)
|
||||
|
||||
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):
|
||||
art = models.CharField(max_length=144, null=True, blank=True)
|
||||
name = models.CharField(max_length=144, null=True, blank=True)
|
||||
price = models.CharField(max_length=144, null=True, blank=True)
|
||||
allergens = models.JSONField(null=True, blank=True)
|
||||
types = models.JSONField(null=True, blank=True)
|
||||
art = models.CharField(max_length=24, choices=ART_CHOICES, default='M')
|
||||
name = models.CharField(max_length=144, default='---', blank=True)
|
||||
price = models.CharField(max_length=144, default='---', blank=True)
|
||||
allergens = models.JSONField(default=list, blank=True)
|
||||
types = models.JSONField(default=list, blank=True)
|
||||
day = models.DateField(null=True, blank=True)
|
||||
likes = models.IntegerField(default=0)
|
||||
locations = models.ManyToManyField(Location)
|
||||
days = models.ManyToManyField(Day)
|
||||
location = models.ForeignKey(Location, on_delete=models.CASCADE, null=True,
|
||||
blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
return f"{self.name}"
|
||||
|
||||
@property
|
||||
def get_price(self):
|
||||
return {
|
||||
'Student': self.price.split(' / ')[0] or 0,
|
||||
'Employee': self.price.split(' / ')[1] or 0,
|
||||
'Guest': self.price.split(' / ')[2] or 0,
|
||||
}
|
||||
try:
|
||||
return {
|
||||
'Student': self.price.split(' / ')[0],
|
||||
'Employee': self.price.split(' / ')[1],
|
||||
'Guest': self.price.split(' / ')[2],
|
||||
}
|
||||
except IndexError:
|
||||
return {
|
||||
'Student': "0,00 €",
|
||||
'Employee': "0,00 €",
|
||||
'Guest': "0,00 €",
|
||||
}
|
||||
|
||||
@property
|
||||
def get_types(self):
|
||||
@ -50,11 +60,19 @@ class Menu(models.Model):
|
||||
|
||||
@property
|
||||
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):
|
||||
related_menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
|
||||
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
|
||||
timestamp = models.DateTimeField(default=now, blank=True)
|
||||
username = models.CharField(max_length=144, default='anon')
|
||||
comment = models.CharField(max_length=720)
|
||||
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)
|
||||
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