diff --git a/db.sqlite3 b/db.sqlite3 index f2574ce..f8ad6e9 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/mensa_app/admin.py b/mensa_app/admin.py index 3bb21ae..223d240 100644 --- a/mensa_app/admin.py +++ b/mensa_app/admin.py @@ -29,3 +29,6 @@ from .models import Bestellung # Ersetze dies durch deine echten Klassennamen admin.site.register(Bestellung) +from .models import Bewertung + +admin.site.register(Bewertung) diff --git a/mensa_app/models.py b/mensa_app/models.py index 605e782..c24c43e 100644 --- a/mensa_app/models.py +++ b/mensa_app/models.py @@ -133,3 +133,63 @@ class Bestellung(models.Model): verbose_name = "Bestellung" verbose_name_plural = "Bestellungen" + +from django.core.exceptions import ValidationError + + +class Bewertung(models.Model): + """ + Repräsentiert die Bewertung eines Gerichts durch einen Nutzer. + """ + + class Sterne(models.IntegerChoices): + EINER = 1, '★☆☆☆☆' + ZWEI = 2, '★★☆☆☆' + DREI = 3, '★★★☆☆' + VIER = 4, '★★★★☆' + FUENF = 5, '★★★★★' + + user = models.ForeignKey('Person', on_delete=models.CASCADE, related_name='bewertungen') + gericht = models.ForeignKey('Gericht', on_delete=models.CASCADE, related_name='bewertungen') + sterne = models.IntegerField(choices=Sterne.choices, default=3) + kommentar = models.TextField(blank=True, null=True) + datum = models.DateTimeField(auto_now_add=True) + + # Das Feld für die Verifizierung + ist_verifiziert = models.BooleanField( + default=False, + help_text="Wird automatisch auf True gesetzt, wenn eine bezahlte Bestellung vorliegt." + ) + + class Meta: + # Verhindert, dass ein Nutzer dasselbe Gericht mehrfach bewertet + unique_together = ('user', 'gericht') + verbose_name = "Bewertung" + verbose_name_plural = "Bewertungen" + + def __str__(self): + return f"{self.user.user.username} bewertet {self.gericht.name} mit {self.sterne} Sternen" + + def clean(self): + """ + Hier können wir zusätzliche Validierungen einbauen. + """ + if self.sterne < 1 or self.sterne > 5: + raise ValidationError("Die Bewertung muss zwischen 1 und 5 Sternen liegen.") + + def check_verifizierung(self): + """ + Ein hilfreicher Service-Method, um den Status der Verifizierung + automatisch zu prüfen. + """ + # Wir prüfen, ob es eine Bestellung für diesen User und dieses Gericht gibt, + # die bereits als 'bezahlt' markiert ist. + exists = Bestellung.objects.filter( + person=self.user, + menue__gericht=self.gericht, + bezahlt=True + ).exists() + + if exists: + self.ist_verifiziert = True + return self.ist_verifiziert