from django.db import models from django_core.models.base import AbstractBaseModel from django.utils.translation import gettext_lazy as _ from django.contrib.auth import get_user_model from django.core.validators import MinValueValidator, MaxValueValidator class FeedbackModel(AbstractBaseModel): star = models.IntegerField( _("Rating"), default=5, validators=[MinValueValidator(1), MaxValueValidator(5)] ) user = models.ForeignKey( get_user_model(), on_delete=models.CASCADE, verbose_name=_("User"), related_name="feedbacks" ) ad = models.ForeignKey( "api.AdModel", on_delete=models.CASCADE, verbose_name=_("Ad"), related_name="feedbacks" ) comment = models.TextField(_("Comment"), max_length=1000) def __str__(self): return f"{self.user.username} - {self.ad.name} ({self.star}★)" class Meta: db_table = "feedback" verbose_name = _("Feedback") verbose_name_plural = _("Feedbacks") ordering = ["-created_at"] unique_together = [["user", "ad"]] indexes = [ models.Index(fields=["ad", "-created_at"]), models.Index(fields=["user"]), ] class FeedbackImageModel(AbstractBaseModel): feedback = models.ForeignKey( FeedbackModel, on_delete=models.CASCADE, verbose_name=_("Feedback"), related_name="images" ) image = models.ImageField(_("Image"), upload_to="feedbacks/") def __str__(self): return f"Image for {self.feedback}" class Meta: db_table = "feedback_images" verbose_name = _("Feedback Image") verbose_name_plural = _("Feedback Images")