from rest_framework import serializers from ..models import Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisSect from .category import LocalizedField class AdminHadisCategorySerializer(serializers.ModelSerializer): sect_type = serializers.CharField(source='sect.sect_type', read_only=True) title = LocalizedField() description = LocalizedField() class Meta: model = HadisCategory fields = [ "id", "title", "slug", "source_type", "order", "sect", "sect_type", "description", ] class AdminHadisStatusSerializer(serializers.ModelSerializer): title = LocalizedField() description = LocalizedField() class Meta: model = HadisStatus fields = ["id", "title", "slug", "color", "order", "description"] class AdminHadisTagSerializer(serializers.ModelSerializer): title = LocalizedField() class Meta: model = HadisTag fields = ["id", "title", "status"] class AdminHadisListSerializer(serializers.ModelSerializer): category_detail = AdminHadisCategorySerializer(source="category", read_only=True) hadis_status_detail = AdminHadisStatusSerializer(source="hadis_status", read_only=True) title = LocalizedField() title_narrator = LocalizedField() translation = LocalizedField() class Meta: model = Hadis fields = [ "id", "number", "slug", "title", "title_narrator", "text", "translation", "status", "category", "category_detail", "hadis_status", "hadis_status_detail", "created_at", "updated_at", ] read_only_fields = ["id", "slug", "created_at", "updated_at"] class AdminHadisDetailSerializer(serializers.ModelSerializer): category_detail = AdminHadisCategorySerializer(source="category", read_only=True) hadis_status_detail = AdminHadisStatusSerializer(source="hadis_status", read_only=True) tags_detail = AdminHadisTagSerializer(source="tags", many=True, read_only=True) category = serializers.PrimaryKeyRelatedField( queryset=HadisCategory.objects.all(), required=False, allow_null=True, ) hadis_status = serializers.PrimaryKeyRelatedField( queryset=HadisStatus.objects.all(), required=False, allow_null=True, ) tags = serializers.PrimaryKeyRelatedField( queryset=HadisTag.objects.all(), many=True, required=False, ) class Meta: model = Hadis fields = [ "id", "number", "slug", "category", "category_detail", "title_narrator", "title", "description", "text", "translation", "status", "hadis_status", "hadis_status_detail", "hadis_status_text", "address", "links", "tags", "tags_detail", "share_link", "explanation", "created_at", "updated_at", "embedded_in", ] read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at"] def create(self, validated_data): tags = validated_data.pop("tags", []) hadis = super().create(validated_data) if tags: hadis.tags.set(tags) return hadis def update(self, instance, validated_data): tags = validated_data.pop("tags", None) hadis = super().update(instance, validated_data) if tags is not None: hadis.tags.set(tags) return hadis class AdminHadisCorrectionSerializer(serializers.ModelSerializer): class Meta: model = HadisCorrection fields = [ "id", "hadis", "title", "slug", "text", "translation", "priority", "created_at", "updated_at", ] read_only_fields = ["id", "slug", "created_at", "updated_at"] class AdminHadisInterpretationSerializer(serializers.ModelSerializer): class Meta: model = HadisInterpretation fields = [ "id", "category", "title", "text", "translation", "priority", "created_at", "updated_at", ] read_only_fields = ["id", "created_at", "updated_at"]