Erste Version mit erstem Datenmodell realisiert. Noch kein Template, kein View.
This commit is contained in:
0
mensa_app/__init__.py
Normal file
0
mensa_app/__init__.py
Normal file
BIN
mensa_app/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
mensa_app/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
BIN
mensa_app/__pycache__/admin.cpython-312.pyc
Normal file
BIN
mensa_app/__pycache__/admin.cpython-312.pyc
Normal file
Binary file not shown.
BIN
mensa_app/__pycache__/apps.cpython-312.pyc
Normal file
BIN
mensa_app/__pycache__/apps.cpython-312.pyc
Normal file
Binary file not shown.
BIN
mensa_app/__pycache__/models.cpython-312.pyc
Normal file
BIN
mensa_app/__pycache__/models.cpython-312.pyc
Normal file
Binary file not shown.
23
mensa_app/admin.py
Normal file
23
mensa_app/admin.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from .models import Person # Ersetze dies durch deine echten Klassennamen
|
||||
|
||||
admin.site.register(Person)
|
||||
|
||||
from .models import SpeiseplanTag # Ersetze dies durch deine echten Klassennamen
|
||||
|
||||
admin.site.register(SpeiseplanTag)
|
||||
|
||||
from .models import Gericht # Ersetze dies durch deine echten Klassennamen
|
||||
|
||||
admin.site.register(Gericht)
|
||||
|
||||
from .models import Menue # Ersetze dies durch deine echten Klassennamen
|
||||
|
||||
admin.site.register(Menue)
|
||||
|
||||
from .models import Bestellung # Ersetze dies durch deine echten Klassennamen
|
||||
|
||||
admin.site.register(Bestellung)
|
||||
|
||||
5
mensa_app/apps.py
Normal file
5
mensa_app/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MensaAppConfig(AppConfig):
|
||||
name = 'mensa_app'
|
||||
63
mensa_app/migrations/0001_initial.py
Normal file
63
mensa_app/migrations/0001_initial.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# Generated by Django 6.0.5 on 2026-05-07 17:29
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
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)),
|
||||
('allergene', models.TextField(blank=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SpeiseplanTag',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('datum', models.DateField(unique=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Menue',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('preis', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||
('gericht', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mensa_app.gericht')),
|
||||
('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='menues', to='mensa_app.speiseplantag')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
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)),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Bestellung',
|
||||
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)),
|
||||
('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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
# 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),
|
||||
),
|
||||
]
|
||||
0
mensa_app/migrations/__init__.py
Normal file
0
mensa_app/migrations/__init__.py
Normal file
BIN
mensa_app/migrations/__pycache__/0001_initial.cpython-312.pyc
Normal file
BIN
mensa_app/migrations/__pycache__/0001_initial.cpython-312.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
mensa_app/migrations/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
mensa_app/migrations/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
57
mensa_app/models.py
Normal file
57
mensa_app/models.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils import timezone
|
||||
|
||||
class Person(models.Model):
|
||||
"""Repräsentiert Schüler oder Lehrer."""
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
rolle = models.CharField(max_length=20, choices=[('schueler', 'Schüler'), ('lehrer', 'Lehrer'), ('mitarbeiter','Mensa-Mitarbeiter'), ('chef','Mensa-Leitung')])
|
||||
klasse = models.CharField(max_length=4, blank=True, null=True) # Nur für Schüler relevant
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user.username} ({self.rolle})"
|
||||
|
||||
class SpeiseplanTag(models.Model):
|
||||
"""Ein bestimmter Tag im Speiseplan."""
|
||||
datum = models.DateField(unique=True)
|
||||
|
||||
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)
|
||||
|
||||
def __str__(self):
|
||||
return self.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')
|
||||
gericht = models.ForeignKey(Gericht, on_delete=models.CASCADE)
|
||||
preis = models.DecimalField(max_digits=5, decimal_places=2)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.tag.datum}: {self.gericht.name} ({self.preis}€)"
|
||||
|
||||
class Bestellung(models.Model):
|
||||
"""Eine abgeschlossene Bestellung eines Nutzers."""
|
||||
STATUS_CHOICES = [
|
||||
('offen', 'Offen'),
|
||||
('abgeholt', 'Abgeholt'),
|
||||
('verwaist', 'Nicht abgeholt'),
|
||||
('bezahlt', 'Bezahlt'),
|
||||
('storniert', 'Storniert'),
|
||||
]
|
||||
|
||||
person = models.ForeignKey(Person, on_delete=models.CASCADE)
|
||||
menue = models.ForeignKey(Menue, on_delete=models.CASCADE)
|
||||
datum_bestellung = models.DateTimeField(default=timezone.now)
|
||||
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='offen')
|
||||
bezahlt = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
return f"Bestellung {self.id} von {self.person.user.username}"
|
||||
3
mensa_app/tests.py
Normal file
3
mensa_app/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
3
mensa_app/views.py
Normal file
3
mensa_app/views.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Reference in New Issue
Block a user