diff --git a/apps/hadis/admin/hadis.py b/apps/hadis/admin/hadis.py index de86b23..56b6cf2 100644 --- a/apps/hadis/admin/hadis.py +++ b/apps/hadis/admin/hadis.py @@ -76,55 +76,55 @@ class HadisAdminForm(forms.ModelForm): } # Schema for explanations JSON field (array of objects with title and description) - explanations_schema = { - "type": "array", - "title": "Explanations", - "items": { - "type": "object", - "title": "Explanation", - "properties": { - "language_code": { - "type": "string", - "title": "Language Code", - "enum": ["en", "fa", "ar", "ur", "ru"], - "options": { - "enum_titles": ["English", "Persian", "Arabic", "Urdu", "Russian"] - } - }, - "title": { - "type": "string", - "title": "Title" - }, - "description": { - "type": "string", - "title": "Description" - } - }, - "required": ["language_code", "title", "description"] - } - } + # explanations_schema = { + # "type": "array", + # "title": "Explanations", + # "items": { + # "type": "object", + # "title": "Explanation", + # "properties": { + # "language_code": { + # "type": "string", + # "title": "Language Code", + # "enum": ["en", "fa", "ar", "ur", "ru"], + # "options": { + # "enum_titles": ["English", "Persian", "Arabic", "Urdu", "Russian"] + # } + # }, + # "title": { + # "type": "string", + # "title": "Title" + # }, + # "description": { + # "type": "string", + # "title": "Description" + # } + # }, + # "required": ["language_code", "title", "description"] + # } + # } # Schema for address_details JSON field (array of objects with text and priority) - address_details_schema = { - "type": "array", - "title": "Address Details", - "items": { - "type": "object", - "title": "Address Detail", - "properties": { - "text": { - "type": "string", - "title": "Address Text" - }, - "priority": { - "type": "integer", - "title": "Priority", - "minimum": 0 - } - }, - "required": ["text", "priority"] - } - } + # address_details_schema = { + # "type": "array", + # "title": "Address Details", + # "items": { + # "type": "object", + # "title": "Address Detail", + # "properties": { + # "text": { + # "type": "string", + # "title": "Address Text" + # }, + # "priority": { + # "type": "integer", + # "title": "Priority", + # "minimum": 0 + # } + # }, + # "required": ["text", "priority"] + # } + # } # Apply JSON editor widgets self.fields['translation'].widget = JsonEditorWidget(attrs={ @@ -137,15 +137,15 @@ class HadisAdminForm(forms.ModelForm): 'title': 'Links' }) - self.fields['explanations'].widget = JsonEditorWidget(attrs={ - 'schema': json.dumps(explanations_schema), - 'title': 'Explanations' - }) + # self.fields['explanations'].widget = JsonEditorWidget(attrs={ + # 'schema': json.dumps(explanations_schema), + # 'title': 'Explanations' + # }) - self.fields['address_details'].widget = JsonEditorWidget(attrs={ - 'schema': json.dumps(address_details_schema), - 'title': 'Address Details' - }) + # self.fields['address_details'].widget = JsonEditorWidget(attrs={ + # 'schema': json.dumps(address_details_schema), + # 'title': 'Address Details' + # }) # Inline Admin Classes @@ -201,26 +201,26 @@ class HadisStatusAdmin(ModelAdmin): class HadisAdmin(ModelAdmin): """Admin for Hadis model""" form = HadisAdminForm - list_display = ('number', 'title', 'category', 'status', 'hadis_status', 'created_at') + list_display = ('number', 'title', 'category', 'status', 'hadis_status', 'created_at','slug') list_filter = ('status', 'hadis_status', 'category', 'created_at') - search_fields = ('title', 'text', 'category__title') - readonly_fields = ('created_at', 'updated_at', 'share_link') + search_fields = ('title', 'text', 'category__title', 'slug') + readonly_fields = ('created_at', 'updated_at', 'share_link', 'slug') ordering = ('category', 'number') inlines = [HadisReferenceInline] filter_horizontal = ('tags',) fieldsets = ( (None, { - 'fields': ('category', 'number', 'title', 'status') + 'fields': ('category', 'number', 'title', 'status', 'slug') }), (_('Content'), { - 'fields': ('text', 'translation', 'explanation', 'explanations') + 'fields': ('text', 'translation', 'explanation') }), (_('Status & Classification'), { 'fields': ('hadis_status', 'hadis_status_text', 'tags') }), (_('Additional Information'), { - 'fields': ('address', 'address_details', 'links', 'share_link'), + 'fields': ('address', 'links', 'share_link'), 'classes': ('collapse',) }), (_('Timestamps'), { diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index 117bcb2..df8714f 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -560,45 +560,37 @@ class HadisReferenceSerializer(serializers.ModelSerializer): ] def get_book_title(self, obj): - """Get book title""" - # ✅ Get language from request - request = self.context.get('request') - lang = request.query_params.get('lang', 'ru') if request else 'ru' - # ✅ CALL THE MODEL METHOD! - try : - title = obj.book_reference.title.get(lang) - return title - except: - return None - - - # def get_book_images(self, obj): - # """Get book images""" - # try : - # images = obj.book_reference.images.all() - # return images - # except: - # return None + title_data = obj.book_reference.title + field = LocalizedField() + field._context = self.context + + return field.to_representation(title_data) def get_book_authors(self, obj): - """Get book authors""" - try : + """Get list of localized author names""" + try: + # 1. Fetch the BookAuthor objects authors = obj.book_reference.authors.all() - return authors - except: - return None - - + + if not authors: + return [] + + # 2. Prepare your localized field helper + field = LocalizedField() + field._context = self.context + + # 3. Loop through authors and convert each object to a string (name) + # Result will be like: ["Al-Bukhari", "Muslim"] + return [field.to_representation(author.name) for author in authors] + + except Exception: + return [] def get_book_description(self, obj): - """Get book description""" - # ✅ Get language from request - request = self.context.get('request') - lang = request.query_params.get('lang', 'ru') if request else 'ru' - try : - description = obj.book_reference.description.get(lang) - return description - except: - return None + description_data = obj.book_reference.description + field = LocalizedField() + field._context = self.context + + return field.to_representation(description_data) class HadisCorrectionSerializer(serializers.ModelSerializer): """Serializer for HadisCorrection"""