You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
407 lines
12 KiB
407 lines
12 KiB
from rest_framework import serializers
|
|
from ..models import (
|
|
Hadis, HadisCategory, HadisStatus, HadisTag, HadisCorrection, HadisInterpretation, HadisSect,
|
|
BookReference, BookReferenceImage, BookReferenceDocument, BookAuthor, BookAttribute, BookSubjectArea, BookType,
|
|
Transmitters, TransmitterReliability
|
|
)
|
|
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"]
|
|
|
|
|
|
class AbsoluteImageField(serializers.ImageField):
|
|
def to_representation(self, value):
|
|
if not value:
|
|
return None
|
|
request = self.context.get("request")
|
|
url = value.url if hasattr(value, "url") else str(value)
|
|
if request:
|
|
return request.build_absolute_uri(url)
|
|
return url
|
|
|
|
|
|
class AbsoluteFileField(serializers.FileField):
|
|
def to_representation(self, value):
|
|
if not value:
|
|
return None
|
|
request = self.context.get("request")
|
|
url = value.url if hasattr(value, "url") else str(value)
|
|
if request:
|
|
return request.build_absolute_uri(url)
|
|
return url
|
|
|
|
|
|
class AdminTransmitterReliabilitySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TransmitterReliability
|
|
fields = ["id", "title", "slug", "color", "main_color_code"]
|
|
|
|
|
|
class AdminTransmitterListSerializer(serializers.ModelSerializer):
|
|
reliability_detail = AdminTransmitterReliabilitySerializer(source="reliability", read_only=True)
|
|
full_name = serializers.JSONField()
|
|
known_as = serializers.JSONField()
|
|
nickname = serializers.JSONField()
|
|
thumbnail = AbsoluteImageField(required=False, allow_null=True)
|
|
share_link = serializers.CharField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Transmitters
|
|
fields = [
|
|
"id",
|
|
"full_name",
|
|
"slug",
|
|
"birth_year_hijri",
|
|
"death_year_hijri",
|
|
"known_as",
|
|
"nickname",
|
|
"reliability",
|
|
"reliability_detail",
|
|
"madhhab",
|
|
"generation",
|
|
"thumbnail",
|
|
"share_link",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at"]
|
|
|
|
|
|
class AdminTransmitterDetailSerializer(serializers.ModelSerializer):
|
|
reliability_detail = AdminTransmitterReliabilitySerializer(source="reliability", read_only=True)
|
|
full_name = serializers.JSONField()
|
|
kunya = serializers.JSONField()
|
|
known_as = serializers.JSONField()
|
|
nickname = serializers.JSONField()
|
|
origin = serializers.JSONField()
|
|
lived_in = serializers.JSONField()
|
|
died_in = serializers.JSONField()
|
|
description = serializers.JSONField()
|
|
thumbnail = AbsoluteImageField(required=False, allow_null=True)
|
|
reliability = serializers.PrimaryKeyRelatedField(
|
|
queryset=TransmitterReliability.objects.all(),
|
|
required=False,
|
|
)
|
|
share_link = serializers.CharField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Transmitters
|
|
fields = [
|
|
"id",
|
|
"full_name",
|
|
"kunya",
|
|
"known_as",
|
|
"nickname",
|
|
"slug",
|
|
"legacy_number",
|
|
"legacy_id",
|
|
"birth_year_hijri",
|
|
"death_year_hijri",
|
|
"age_at_death",
|
|
"generation",
|
|
"reliability",
|
|
"reliability_detail",
|
|
"madhhab",
|
|
"in_sahih_muslim",
|
|
"in_sahih_bukhari",
|
|
"origin",
|
|
"lived_in",
|
|
"died_in",
|
|
"description",
|
|
"thumbnail",
|
|
"share_link",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at", "reliability_detail"]
|
|
|
|
|
|
class AdminBookSubjectAreaSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookSubjectArea
|
|
fields = ["id", "title"]
|
|
|
|
|
|
class AdminBookTypeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookType
|
|
fields = ["id", "title"]
|
|
|
|
|
|
class AdminBookAuthorSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookAuthor
|
|
fields = ["id", "name", "birth_year_hijri", "death_year_hijri", "birth_year_miladi", "death_year_miladi"]
|
|
|
|
|
|
class AdminBookAttributeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookAttribute
|
|
fields = ["id", "book_reference", "title", "value"]
|
|
|
|
|
|
class AdminBookReferenceImageSerializer(serializers.ModelSerializer):
|
|
image = AbsoluteImageField(required=True)
|
|
|
|
class Meta:
|
|
model = BookReferenceImage
|
|
fields = ["id", "book_reference", "image", "volume", "order", "description"]
|
|
|
|
|
|
class AdminBookReferenceDocumentSerializer(serializers.ModelSerializer):
|
|
file = AbsoluteFileField(required=True)
|
|
|
|
class Meta:
|
|
model = BookReferenceDocument
|
|
fields = ["id", "book_reference", "file", "volume", "title", "order"]
|
|
|
|
|
|
class AdminBookReferenceListSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BookReference
|
|
fields = [
|
|
"id",
|
|
"title",
|
|
"slug",
|
|
"volume",
|
|
"publisher",
|
|
"year_of_publication",
|
|
"rate",
|
|
"created_at",
|
|
]
|
|
|
|
|
|
class AdminBookReferenceDetailSerializer(serializers.ModelSerializer):
|
|
subject_area_detail = AdminBookSubjectAreaSerializer(source="subject_area", many=True, read_only=True)
|
|
type_detail = AdminBookTypeSerializer(source="type", read_only=True)
|
|
authors_detail = AdminBookAuthorSerializer(source="authors", many=True, read_only=True)
|
|
|
|
subject_area = serializers.PrimaryKeyRelatedField(
|
|
queryset=BookSubjectArea.objects.all(),
|
|
many=True,
|
|
required=False,
|
|
)
|
|
type = serializers.PrimaryKeyRelatedField(
|
|
queryset=BookType.objects.all(),
|
|
required=False,
|
|
allow_null=True,
|
|
)
|
|
authors = serializers.PrimaryKeyRelatedField(
|
|
queryset=BookAuthor.objects.all(),
|
|
many=True,
|
|
required=False,
|
|
)
|
|
|
|
class Meta:
|
|
model = BookReference
|
|
fields = [
|
|
"id",
|
|
"legacy_id",
|
|
"source_url",
|
|
"title",
|
|
"description",
|
|
"language",
|
|
"isbn",
|
|
"volume",
|
|
"number_of_volumes",
|
|
"year_of_publication",
|
|
"number_page",
|
|
"slug",
|
|
"publisher",
|
|
"subject_area",
|
|
"subject_area_detail",
|
|
"type",
|
|
"type_detail",
|
|
"order",
|
|
"researcher",
|
|
"city_of_publication",
|
|
"country_of_publication",
|
|
"edition_number",
|
|
"rate",
|
|
"authors",
|
|
"authors_detail",
|
|
"created_at",
|
|
"updated_at",
|
|
"share_link",
|
|
]
|
|
read_only_fields = ["id", "slug", "created_at", "updated_at", "share_link"]
|
|
|
|
def create(self, validated_data):
|
|
subject_area = validated_data.pop("subject_area", [])
|
|
authors = validated_data.pop("authors", [])
|
|
book = super().create(validated_data)
|
|
if subject_area:
|
|
book.subject_area.set(subject_area)
|
|
if authors:
|
|
book.authors.set(authors)
|
|
return book
|
|
|
|
def update(self, instance, validated_data):
|
|
subject_area = validated_data.pop("subject_area", None)
|
|
authors = validated_data.pop("authors", None)
|
|
book = super().update(instance, validated_data)
|
|
if subject_area is not None:
|
|
book.subject_area.set(subject_area)
|
|
if authors is not None:
|
|
book.authors.set(authors)
|
|
return book
|