47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
|
|
from django.db import models
|
||
|
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
||
|
|
|
||
|
|
|
||
|
|
class Review(models.Model):
|
||
|
|
STATUS_PENDING = 'pending'
|
||
|
|
STATUS_LIVE = 'live'
|
||
|
|
STATUS_REJECTED = 'rejected'
|
||
|
|
STATUS_CHOICES = [
|
||
|
|
(STATUS_PENDING, 'Pending'),
|
||
|
|
(STATUS_LIVE, 'Live'),
|
||
|
|
(STATUS_REJECTED, 'Rejected'),
|
||
|
|
]
|
||
|
|
REJECT_CHOICES = [
|
||
|
|
('spam', 'Spam'),
|
||
|
|
('inappropriate', 'Inappropriate'),
|
||
|
|
('fake', 'Fake'),
|
||
|
|
]
|
||
|
|
|
||
|
|
reviewer = models.ForeignKey(
|
||
|
|
'accounts.User', on_delete=models.CASCADE, related_name='admin_reviews'
|
||
|
|
)
|
||
|
|
event = models.ForeignKey(
|
||
|
|
'events.Event', on_delete=models.CASCADE, related_name='admin_reviews'
|
||
|
|
)
|
||
|
|
rating = models.IntegerField(
|
||
|
|
validators=[MinValueValidator(1), MaxValueValidator(5)]
|
||
|
|
)
|
||
|
|
review_text = models.TextField()
|
||
|
|
submission_date = models.DateTimeField(auto_now_add=True)
|
||
|
|
status = models.CharField(
|
||
|
|
max_length=10, choices=STATUS_CHOICES, default=STATUS_PENDING
|
||
|
|
)
|
||
|
|
reject_reason = models.CharField(
|
||
|
|
max_length=15, choices=REJECT_CHOICES, null=True, blank=True
|
||
|
|
)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
ordering = ['-submission_date']
|
||
|
|
indexes = [
|
||
|
|
models.Index(fields=['status']),
|
||
|
|
models.Index(fields=['submission_date']),
|
||
|
|
]
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return f'Review #{self.pk} by {self.reviewer_id} — {self.status}'
|