59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
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")
|