115 lines
2.8 KiB
Python
115 lines
2.8 KiB
Python
from rest_framework import serializers
|
|
from .models import (
|
|
Tag,
|
|
Ingredient,
|
|
PantryItem,
|
|
MetaRecipe,
|
|
Slot,
|
|
SlotOption,
|
|
MetaRecipeBase,
|
|
Recipe,
|
|
RecipeIngredient,
|
|
CookLog,
|
|
ShoppingListItem,
|
|
)
|
|
|
|
|
|
class TagSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Tag
|
|
fields = "__all__"
|
|
|
|
|
|
class IngredientSerializer(serializers.ModelSerializer):
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
tag_ids = serializers.PrimaryKeyRelatedField(
|
|
queryset=Tag.objects.all(), many=True, write_only=True, source="tags", required=False
|
|
)
|
|
|
|
class Meta:
|
|
model = Ingredient
|
|
fields = "__all__"
|
|
|
|
|
|
class PantryItemSerializer(serializers.ModelSerializer):
|
|
ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
|
|
|
|
class Meta:
|
|
model = PantryItem
|
|
fields = "__all__"
|
|
|
|
|
|
# --- Meta-Recipe nested serializers ---
|
|
|
|
|
|
class SlotOptionSerializer(serializers.ModelSerializer):
|
|
ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
|
|
|
|
class Meta:
|
|
model = SlotOption
|
|
fields = "__all__"
|
|
|
|
|
|
class SlotSerializer(serializers.ModelSerializer):
|
|
options = SlotOptionSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Slot
|
|
fields = "__all__"
|
|
|
|
|
|
class MetaRecipeBaseSerializer(serializers.ModelSerializer):
|
|
ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
|
|
|
|
class Meta:
|
|
model = MetaRecipeBase
|
|
fields = "__all__"
|
|
|
|
|
|
class MetaRecipeSerializer(serializers.ModelSerializer):
|
|
slots = SlotSerializer(many=True, read_only=True)
|
|
base_ingredients = MetaRecipeBaseSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = MetaRecipe
|
|
fields = "__all__"
|
|
|
|
|
|
# --- Fixed Recipe nested serializers ---
|
|
|
|
|
|
class RecipeIngredientSerializer(serializers.ModelSerializer):
|
|
ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
|
|
|
|
class Meta:
|
|
model = RecipeIngredient
|
|
fields = "__all__"
|
|
|
|
|
|
class RecipeSerializer(serializers.ModelSerializer):
|
|
ingredients = RecipeIngredientSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Recipe
|
|
fields = "__all__"
|
|
|
|
|
|
# --- Cook Log & Shopping ---
|
|
|
|
|
|
class CookLogSerializer(serializers.ModelSerializer):
|
|
meta_recipe_name = serializers.CharField(source="meta_recipe.name", read_only=True, default=None)
|
|
recipe_name = serializers.CharField(source="recipe.name", read_only=True, default=None)
|
|
|
|
class Meta:
|
|
model = CookLog
|
|
fields = "__all__"
|
|
|
|
|
|
class ShoppingListItemSerializer(serializers.ModelSerializer):
|
|
ingredient_name = serializers.CharField(source="ingredient.name", read_only=True, default=None)
|
|
|
|
class Meta:
|
|
model = ShoppingListItem
|
|
fields = "__all__"
|