from django.db import models from django.core.validators import MinValueValidator, MaxValueValidator from core.history import TrackedModel import pghistory @pghistory.track() class ParkReview(TrackedModel): """ A review of a park. """ park = models.ForeignKey( 'parks.Park', on_delete=models.CASCADE, related_name='reviews' ) user = models.ForeignKey( 'accounts.User', on_delete=models.CASCADE, related_name='park_reviews' ) rating = models.PositiveSmallIntegerField( validators=[MinValueValidator(1), MaxValueValidator(10)] ) title = models.CharField(max_length=200) content = models.TextField() visit_date = models.DateField() # Metadata created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) # Moderation is_published = models.BooleanField(default=True) moderation_notes = models.TextField(blank=True) moderated_by = models.ForeignKey( 'accounts.User', on_delete=models.SET_NULL, null=True, blank=True, related_name='moderated_park_reviews' ) moderated_at = models.DateTimeField(null=True, blank=True) class Meta: ordering = ['-created_at'] unique_together = ['park', 'user'] def __str__(self): return f"Review of {self.park.name} by {self.user.username}"