from rest_framework import serializers from apps.dashboard.models import Item, Note from apps.lyric.models import User class ItemSerializer(serializers.ModelSerializer): text = serializers.CharField() def validate_text(self, value): note = self.context["note"] if note.item_set.filter(text=value).exists(): raise serializers.ValidationError("duplicate") return value class Meta: model = Item fields = ["id", "text"] class NoteSerializer(serializers.ModelSerializer): name = serializers.ReadOnlyField() url = serializers.CharField(source="get_absolute_url", read_only=True) items = ItemSerializer(many=True, read_only=True, source="item_set") class Meta: model = Note fields = ["id", "name", "url", "items"] class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ["id", "username"]