from rest_framework import serializers from core.apps.evaluation.models import ReferenceitemModel class BaseReferenceitemSerializer(serializers.ModelSerializer): type_display = serializers.CharField(source="get_type_display", read_only=True) parent_name = serializers.CharField(source="parent.name", read_only=True, default=None) class Meta: model = ReferenceitemModel fields = [ "id", "type", "type_display", "name", "parent", "parent_name", "order", "is_active", ] class ListReferenceitemSerializer(BaseReferenceitemSerializer): class Meta(BaseReferenceitemSerializer.Meta): pass class RetrieveReferenceitemSerializer(BaseReferenceitemSerializer): children = serializers.SerializerMethodField() class Meta(BaseReferenceitemSerializer.Meta): fields = BaseReferenceitemSerializer.Meta.fields + ["children"] def get_children(self, obj): children = obj.children.filter(is_active=True).order_by("order", "name") return ListReferenceitemSerializer(children, many=True).data class CreateReferenceitemSerializer(BaseReferenceitemSerializer): class Meta(BaseReferenceitemSerializer.Meta): fields = [ "type", "name", "parent", "order", "is_active", ] class EvaluationPurposeSerializer(serializers.ModelSerializer): label = serializers.CharField(source="name") value = serializers.IntegerField(source="id") class Meta: model = ReferenceitemModel fields = ["label", "value"]