CCCPaste

5. Menu Review

class RestaurantReview(models.Model):
    reviewer_name = models.CharField(max_length=100)
    restaurant = models.ForeignKey("Restaurant", on_delete=models.CASCADE)
    review_content = models.TextField()
    rating = models.PositiveIntegerField(validators=[validators.MaxValueValidator(5)])
    
    class Meta:
        abstract = True
        ordering = ["-rating"]
        verbose_name = "Restaurant Review"
        verbose_name_plural = "Restaurant Reviews"
        unique_together = ["reviewer_name", "restaurant"]
        
        
class RegularRestaurantReview(RestaurantReview):
    pass


class FoodCriticRestaurantReview(RestaurantReview):
    food_critic_cuisine_area = models.CharField(max_length=100)
    
    class Meta:
        ordering = ["-rating"]
        verbose_name = "Food Critic Review"
        verbose_name_plural = "Food Critic Reviews"
        unique_together = ["reviewer_name", "restaurant"]
        
        
class MenuReview(models.Model):
    reviewer_name = models.CharField(max_length=100)
    menu = models.ForeignKey("Menu", on_delete=models.CASCADE)
    review_content = models.TextField()
    rating = models.PositiveIntegerField(validators=[validators.MaxValueValidator(5)])
    
    class Meta:
        ordering = ['-rating']
        verbose_name = "Menu Review"
        verbose_name_plural = "Menu Reviews"
        unique_together = ["reviewer_name", "menu"]
        indexes = [models.Index(field=['menu'], name="main_app_menu_review_menu_id")]