Datenmodell für Bewertungssystem (5 stars) ergänzt.

This commit is contained in:
2026-05-15 11:32:44 +02:00
parent bb184ff952
commit 5e06265a2f
3 changed files with 63 additions and 0 deletions

Binary file not shown.

View File

@@ -29,3 +29,6 @@ from .models import Bestellung # Ersetze dies durch deine echten Klassennamen
admin.site.register(Bestellung) admin.site.register(Bestellung)
from .models import Bewertung
admin.site.register(Bewertung)

View File

@@ -133,3 +133,63 @@ class Bestellung(models.Model):
verbose_name = "Bestellung" verbose_name = "Bestellung"
verbose_name_plural = "Bestellungen" 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