65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
from django.contrib.contenttypes import fields as generic
|
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from utils.models import BaseAttributes, TraslatedFieldsMixin
|
|
from utils.models import TJSONField
|
|
|
|
|
|
class ReviewQuerySet(models.QuerySet):
|
|
"""QuerySets for model Review"""
|
|
|
|
def by_reviewer(self, user):
|
|
"""Return reviews by user"""
|
|
return self.filter(reviewer=user)
|
|
|
|
def by_vintage(self, year: int):
|
|
"""Return reviews by year"""
|
|
return self.filter(vintage=year)
|
|
|
|
|
|
class Review(BaseAttributes, TraslatedFieldsMixin):
|
|
"""Review model"""
|
|
TO_INVESTIGATE = 0
|
|
TO_REVIEW = 1
|
|
READY = 2
|
|
REVIEW_STATUSES = (
|
|
(TO_INVESTIGATE, _('To investigate')),
|
|
(TO_REVIEW, _('To review')),
|
|
(READY, _('Ready')),
|
|
)
|
|
|
|
reviewer = models.ForeignKey('account.User',
|
|
related_name='reviews',
|
|
on_delete=models.CASCADE,
|
|
verbose_name=_('Reviewer'))
|
|
text = TJSONField(
|
|
_('text'), null=True, blank=True,
|
|
default=None, help_text='{"en-GB":"Text review"}')
|
|
content_type = models.ForeignKey(generic.ContentType, on_delete=models.CASCADE)
|
|
object_id = models.PositiveIntegerField()
|
|
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
|
language = models.ForeignKey('translation.Language',
|
|
on_delete=models.CASCADE,
|
|
related_name='reviews',
|
|
verbose_name=_('Review language'))
|
|
status = models.PositiveSmallIntegerField(choices=REVIEW_STATUSES, default=TO_INVESTIGATE)
|
|
child = models.ForeignKey('self',
|
|
blank=True, default=None, null=True,
|
|
on_delete=models.CASCADE,
|
|
verbose_name=_('Child review'))
|
|
published_at = models.DateTimeField(verbose_name=_('Publish datetime'),
|
|
blank=True, default=None, null=True,
|
|
help_text=_('Review published datetime'))
|
|
vintage = models.IntegerField(verbose_name=_('Year of review'),
|
|
validators=[MinValueValidator(1900),
|
|
MaxValueValidator(2100)])
|
|
|
|
objects = ReviewQuerySet.as_manager()
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
verbose_name = _('Review')
|
|
verbose_name_plural = _('Reviews')
|