from rest_framework import serializers from app.expenses.models import Category, Expense, Subcategory class SubcategorySerializer(serializers.ModelSerializer): class Meta: model = Subcategory fields = ["id", "name", "order"] class CategorySerializer(serializers.ModelSerializer): subcategories = SubcategorySerializer(many=True, read_only=True) class Meta: model = Category fields = ["id", "name", "order", "subcategories"] class ExpenseReadSerializer(serializers.ModelSerializer): category = serializers.StringRelatedField() subcategory = serializers.StringRelatedField() class Meta: model = Expense fields = ["id", "concept", "amount", "category", "subcategory", "created_at"] class ExpenseWriteSerializer(serializers.ModelSerializer): class Meta: model = Expense fields = ["concept", "amount", "category", "subcategory"] def validate(self, data): category = data.get("category") subcategory = data.get("subcategory") if subcategory and subcategory.category != category: raise serializers.ValidationError( {"subcategory": "Subcategory does not belong to the selected category."} ) return data