diff --git a/.gitignore b/.gitignore index 9031276..41e951a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ __pycache__/ *.pyc -*.sqlite3 diff --git a/README.md b/README.md index 089bb04..41e75a7 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,15 @@ Muster-Implementation durch die Lehrkraft in python3 mit Django ## To get started +## Vorbereitung der virtuellen Entwicklungsumgebung + +in einem Projekt-Vezeichnis über dem eigentlichen SGTMensa-Projekt-Ordner + ```bash -cd SGTMensa python3 -m venv .venv source .venv/bin/activate pip install django -django-admin startproject mensa-core . +pip install pillow ``` Falls eine fish-Shell vorliegt: @@ -19,9 +22,27 @@ Falls eine fish-Shell vorliegt: python3 -m venv .venv source .venv/bin/activate.fish pip install django -django-admin startproject mensa-core . +pip install pillow ``` +## Klonen des eigentlichen Projekts + +```bash +git clone https://git.sgtlernen.de/mputzlocher/SGTMensa.git +``` + +## Starten des Servers + +```bash +cd SGTMensa +python manage.py runserver +``` + + +--- + +# Erweiterte Erklärung einzelner Schritte + ### Schritt 1: Die Arbeitsumgebung isolieren (Virtual Environment) Bevor du auch nur eine Zeile Code schreibst, erstelle eine eigene Umgebung. Das verhindert, dass sich verschiedene Projekte auf deinem Rechner gegenseitig stören. @@ -42,9 +63,10 @@ Installiere nur das Nötigste. Für den Start reicht Django. ```bash pip install django +pip install pillow ``` -### Schritt 3: Das Projekt initialisieren +### Schritt 3: Das Projekt initialisieren (nur einmalig, beim ersten Start des Projekts) Erstelle die Struktur eines Django-Projekts. @@ -118,4 +140,71 @@ python manage.py runserver -Öffne deinen Browser unter `http://127.0.0.1:8000/admin`. Logge dich mit deinem Superuser ein. **Herzlichen Glückwunsch!** Du hast eine voll funktionsfähige Web-Anwendung, mit der du bereits Speisepläne und Bestellungen in einer Datenbank verwalten kannst. \ No newline at end of file +Öffne deinen Browser unter `http://127.0.0.1:8000/admin`. Logge dich mit deinem Superuser ein. **Herzlichen Glückwunsch!** Du hast eine voll funktionsfähige Web-Anwendung, mit der du bereits Speisepläne und Bestellungen in einer Datenbank verwalten kannst. + + +### Schritt 9: Eigentliche Entwicklungsarbeit + +Folgende Befehle werden nacheinander ausgeführt: + +#### Eigenen Projektbaum auf dem lokalen Rechen auf den aktuellen Stand bringen + +Öffne ein Terminal und navigiere in das Projektverzeichnis, das bereits über `git clone` abgeholt worden ist. + +zum Beispiel: +```bash +cd ~/projects/SGTMensa +``` + +Hole den aktuellen Stand ab: +```bash +git pull +``` + +Aktiviere die virtuelle Entwicklungsumgebung (falls noch nicht geschehen): +```bash +source .venv/bin/activate +``` + +Führe notwendige Migrationen der bestehenden Datenbank aus: +```bash +python manage.py makemigrations +python manage.py migrate +``` + +Starte den Server des Projekts: +```bash +python manage.py runserver +``` +Jetzt bist Du startklar für die Entwicklungsarbeit und solltest den aktuellen Stand im Browser unter `http://localhost:8000/` abrufen können. + +#### Änderungen vornehmen + +Django erkennt selbstständig Veränderungen am Quellcode und startet den Webserver neu. Achte auf Fehlermeldungen! + +#### Änderungen wieder auf den git-Server einspielen + +Nach einem Entwicklungsschritt solltest Du Deine Änderungen von Deinem lokalen Rechner wieder auf den git-Server hochladen, +damit Dein Team auch sieht, was Du gemacht hast, und damit Deine Ergänzungen und Änderungen wieder in den gemeinsamen +Code integriert werden können. + +Nachsehen der Änderungen: +```bash +git status +``` +Dies zeigt alle veränderten Dateien an. + +Veränderte Dateien ins Änderungspaket aufnehmen: +```bash +git add . +``` + +Veränderungen bestätigen und beschreiben: +```bash +git commit -m "Deine sinnvolle Beschreibung der Änderung in wenigen Worten" +``` + +Veränderungen auf den git-Server hochladen: +```bash +git push +``` diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..99587ff Binary files /dev/null and b/db.sqlite3 differ diff --git a/mensa_app/forms.py b/mensa_app/forms.py new file mode 100644 index 0000000..d9bcac4 --- /dev/null +++ b/mensa_app/forms.py @@ -0,0 +1,33 @@ +# forms.py + +from django import forms +from .models import Gericht +# Importiere alle Modelle, die für das Formular relevant sind +from .models import Kategorie + +class GerichtForm(forms.ModelForm): + """Definiert die Struktur und Validierungsregeln für das Gericht-Modell.""" + + class Meta: + model = Gericht + fields = [ + 'name', + 'kategorie', + 'preis', + 'ist_vegetarisch', + 'ist_allergene_frei', + 'allergene', + 'beschreibung', # Neues Feld für Zutaten/Rohstoffe + 'bilder', # Das Bild-Feld + 'ist_dauerangebot' + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Wir können hier zusätzliche Validierungen oder Widgets einbinden + # Beispiel: Erzwinge das Betreten der Kategorie-Auswahl + self.fields['kategorie'].required = True + + # Hier könntest du auch einen Fallback für den Preis hinzufügen, falls er nicht gesetzt ist + if 'initial' in kwargs: # Wird bei GET-Requests genutzt + self.initial['preis'] = 0.00 diff --git a/mensa_app/migrations/0011_alter_person_options_alter_gericht_time_creation_and_more.py b/mensa_app/migrations/0011_alter_person_options_alter_gericht_time_creation_and_more.py new file mode 100644 index 0000000..81d30d5 --- /dev/null +++ b/mensa_app/migrations/0011_alter_person_options_alter_gericht_time_creation_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2.15 on 2026-06-12 10:50 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mensa_app', '0010_merge_20260612_0913'), + ] + + operations = [ + migrations.AlterModelOptions( + name='person', + options={}, + ), + migrations.AlterField( + model_name='gericht', + name='time_creation', + field=models.TimeField(default=datetime.datetime(2026, 6, 12, 10, 50, 49, 206132)), + ), + migrations.AlterField( + model_name='gericht', + name='time_last_change', + field=models.TimeField(default=datetime.datetime(2026, 6, 12, 10, 50, 49, 206132)), + ), + migrations.AlterField( + model_name='gerichtbild', + name='id', + field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='person', + name='rolle', + field=models.CharField(choices=[('schueler', 'Schüler'), ('eltern', 'Eltern'), ('lehrer', 'Lehrer'), ('mitarbeiter', 'Mensa-Mitarbeiter'), ('chef', 'Mensa-Leitung')], max_length=20), + ), + ] diff --git a/mensa_app/models.py b/mensa_app/models.py index 88062d2..d99ca4b 100644 --- a/mensa_app/models.py +++ b/mensa_app/models.py @@ -1,10 +1,8 @@ +import os from django.db import models from django.contrib.auth.models import User from django.utils import timezone import datetime - -import os -from django.db import models from django.core.exceptions import ValidationError from django.core.validators import FileExtensionValidator # Pillow ist für die Bildbearbeitung zuständig (installiere per pip install pillow) @@ -130,6 +128,7 @@ class Gericht(models.Model): ) ist_vegetarisch = models.BooleanField(default=False) ist_allergene_frei = models.BooleanField(default=False) + beschreibung = models.TextField(blank=True, null=True) # Zutaten/Rohstoffe Beschreibung (Textfeld für V1) allergene = models.TextField(blank=True, default="") preis = models.DecimalField(max_digits=5, decimal_places=2, default=0.00) diff --git a/mensa_app/templates/mensa_app/add_gericht.html b/mensa_app/templates/mensa_app/add_gericht.html new file mode 100644 index 0000000..f89c48e --- /dev/null +++ b/mensa_app/templates/mensa_app/add_gericht.html @@ -0,0 +1,32 @@ + + +
+ + + ++ Das Gericht {{ objekt_name }} wurde erfolgreich in das Menüsystem übernommen. +
++ Du kannst nun die Details überprüfen und weitere Gerichte hinzufügen. +
+