From 3099e5579b97f6000fce2255a59eb4dff338bcb3 Mon Sep 17 00:00:00 2001 From: Anushka Weerasooriya Date: Mon, 9 Mar 2026 23:51:16 +0000 Subject: [PATCH] Add recipe rating model & serializer with validation --- app/models.py | 18 ++++++++++++++++++ app/serializers.py | 15 ++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/models.py b/app/models.py index a3429ca..5165417 100644 --- a/app/models.py +++ b/app/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.conf import settings class Recipe(models.Model): @@ -9,3 +10,20 @@ class Recipe(models.Model): def __str__(self): return self.title + + +class RecipeRating(models.Model): + recipe = models.ForeignKey( + Recipe, on_delete=models.CASCADE, related_name="ratings" + ) + user = models.ForeignKey( + settings.AUTH_USER_MODEL, on_delete=models.CASCADE + ) + stars = models.PositiveSmallIntegerField( + choices=[(i, f"{i} star{'s' if i>1 else ''}") for i in range(1, 6)] + ) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ("recipe", "user") + ordering = ["-created_at"] \ No newline at end of file diff --git a/app/serializers.py b/app/serializers.py index ea8a3de..81010f1 100644 --- a/app/serializers.py +++ b/app/serializers.py @@ -1,9 +1,18 @@ from rest_framework import serializers - -from .models import Recipe - +from .models import Recipe, RecipeRating class RecipeSerializer(serializers.ModelSerializer): class Meta: model = Recipe fields = ["id", "title", "description", "time_minutes", "price"] + +class RecipeRatingSerializer(serializers.ModelSerializer): + class Meta: + model = RecipeRating + fields = ["id", "stars", "created_at"] + read_only_fields = ["id", "created_at"] + + def validate_stars(self, value): + if not (1 <= value <= 5): + raise serializers.ValidationError("Rating must be between 1 and 5.") + return value \ No newline at end of file