Datenmodell für Bewertungssystem (5 stars) ergänzt.
This commit is contained in:
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user