from rest_framework import serializers from apps.dashboard.models import Item, List from apps.lyric.models import User class ItemSerializer(serializers.ModelSerializer): text = serializers.CharField() def validate_text(self, value): list_ = self.context["list"] if list_.item_set.filter(text=value).exists(): raise serializers.ValidationError("duplicate") return value class Meta: model = Item fields = ["id", "text"] class ListSerializer(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 = List fields = ["id", "name", "url", "items"] class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ["id", "username"]