Kategorien für Gerichte ergänzt

This commit is contained in:
2026-05-08 00:17:07 +02:00
parent a9afaff671
commit 932d17d12a
11 changed files with 58 additions and 47 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -9,6 +9,10 @@ from .models import SpeiseplanTag # Ersetze dies durch deine echten Klassennamen
admin.site.register(SpeiseplanTag)
from .models import Kategorie # Ersetze dies durch deine echten Klassennamen
admin.site.register(Kategorie)
from .models import Gericht # Ersetze dies durch deine echten Klassennamen
admin.site.register(Gericht)

View File

@@ -1,4 +1,4 @@
# Generated by Django 6.0.5 on 2026-05-07 17:29
# Generated by Django 6.0.5 on 2026-05-07 22:11
import django.db.models.deletion
import django.utils.timezone
@@ -16,13 +16,14 @@ class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='Gericht',
name='Kategorie',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('ist_vegetarisch', models.BooleanField(default=False)),
('allergene', models.TextField(blank=True)),
('name', models.CharField(default='', max_length=50, unique=True)),
],
options={
'verbose_name_plural': 'Kategorien',
},
),
migrations.CreateModel(
name='SpeiseplanTag',
@@ -31,6 +32,19 @@ class Migration(migrations.Migration):
('datum', models.DateField(unique=True)),
],
),
migrations.CreateModel(
name='Gericht',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('ist_vegetarisch', models.BooleanField(default=False)),
('ist_allergene_frei', models.BooleanField(default=False)),
('allergene', models.TextField(blank=True, default='')),
('preis', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)),
('ist_dauerangebot', models.BooleanField(default=False, help_text='Wenn aktiviert, ist dieses Gericht immer verfügbar und nicht an einen spezifischen Tag gebunden.')),
('kategorie', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='gerichte', to='mensa_app.kategorie')),
],
),
migrations.CreateModel(
name='Menue',
fields=[
@@ -44,8 +58,8 @@ class Migration(migrations.Migration):
name='Person',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rolle', models.CharField(choices=[('schueler', 'Schüler'), ('lehrer', 'Lehrer')], max_length=20)),
('klasse', models.CharField(blank=True, max_length=10, null=True)),
('rolle', models.CharField(choices=[('schueler', 'Schüler'), ('lehrer', 'Lehrer'), ('mitarbeiter', 'Mensa-Mitarbeiter'), ('chef', 'Mensa-Leitung')], max_length=20)),
('klasse', models.CharField(blank=True, max_length=4, null=True)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
@@ -54,7 +68,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('datum_bestellung', models.DateTimeField(default=django.utils.timezone.now)),
('status', models.CharField(choices=[('offen', 'Offen'), ('bezahlt', 'Bezahlt'), ('storniert', 'Storniert')], default='offen', max_length=10)),
('status', models.CharField(choices=[('offen', 'Offen'), ('abgeholt', 'Abgeholt'), ('verwaist', 'Nicht abgeholt'), ('bezahlt', 'Bezahlt'), ('storniert', 'Storniert')], default='offen', max_length=10)),
('bezahlt', models.BooleanField(default=False)),
('menue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mensa_app.menue')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mensa_app.person')),

View File

@@ -1,33 +0,0 @@
# Generated by Django 6.0.5 on 2026-05-07 17:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('mensa_app', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='gericht',
name='preis',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=5),
),
migrations.AlterField(
model_name='bestellung',
name='status',
field=models.CharField(choices=[('offen', 'Offen'), ('abgeholt', 'Abgeholt'), ('verwaist', 'Nicht abgeholt'), ('bezahlt', 'Bezahlt'), ('storniert', 'Storniert')], default='offen', max_length=10),
),
migrations.AlterField(
model_name='person',
name='klasse',
field=models.CharField(blank=True, max_length=4, null=True),
),
migrations.AlterField(
model_name='person',
name='rolle',
field=models.CharField(choices=[('schueler', 'Schüler'), ('lehrer', 'Lehrer'), ('mitarbeiter', 'Mensa-Mitarbeiter'), ('chef', 'Mensa-Leitung')], max_length=20),
),
]

View File

@@ -18,16 +18,42 @@ class SpeiseplanTag(models.Model):
def __str__(self):
return self.datum.strftime('%d.%m.%Y')
class Gericht(models.Model):
"""Ein einzelnes Gericht (z.B. 'Nudeln mit Tomatensauce')."""
name = models.CharField(max_length=100)
ist_vegetarisch = models.BooleanField(default=False)
allergene = models.TextField(blank=True)
preis = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
class Kategorie(models.Model):
"""
Definiert die Art der Speise (Süßspeise, Hauptgericht, etc.).
"""
name = models.CharField(max_length=50, unique=True, default="")
class Meta:
verbose_name_plural = "Kategorien"
def __str__(self):
return self.name
class Gericht(models.Model):
"""Ein einzelnes Gericht (z.B. 'Nudeln mit Tomatensauce')."""
name = models.CharField(max_length=100)
# PROTECT verhindert, dass eine Kategorie gelöscht wird,
# solange noch Gerichte ihr zugeordnet sind.
kategorie = models.ForeignKey(
Kategorie,
on_delete=models.PROTECT,
related_name='gerichte'
)
ist_vegetarisch = models.BooleanField(default=False)
ist_allergene_frei = models.BooleanField(default=False)
allergene = models.TextField(blank=True, default="")
preis = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
# Das Attribut für das "Dauerangebot"
ist_dauerangebot = models.BooleanField(
default=False,
help_text="Wenn aktiviert, ist dieses Gericht immer verfügbar und nicht an einen spezifischen Tag gebunden."
)
def __str__(self):
return f"{self.name} ({self.kategorie.name})"
class Menue(models.Model):
"""Eine Kombination von Speisen für einen Tag (z.B. Hauptgang + Dessert)."""
tag = models.ForeignKey(SpeiseplanTag, on_delete=models.CASCADE, related_name='menues')