Browse Source

update intrepertations schema and style with new changes , gettin slug from its category

master
Mohsen Taba 4 weeks ago
parent
commit
1d7f6db26c
  1. 84
      apps/hadis/migrations/0021_rename_page_originaltextreference_pages_and_more.py
  2. 18
      apps/hadis/migrations/0022_hadisinterpretation_slug.py
  3. 7
      apps/hadis/models/hadis.py
  4. 3
      apps/hadis/urls.py
  5. 20
      apps/hadis/views/hadis.py

84
apps/hadis/migrations/0021_rename_page_originaltextreference_pages_and_more.py

@ -0,0 +1,84 @@
# Generated by Django 5.2.12 on 2026-06-23 11:34
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hadis', '0020_transmitteropinion_scholar'),
]
operations = [
migrations.RenameField(
model_name='originaltextreference',
old_name='page',
new_name='pages',
),
migrations.AddField(
model_name='correctionreference',
name='address',
field=models.TextField(blank=True, null=True, verbose_name='Address'),
),
migrations.AddField(
model_name='correctionreference',
name='book_volume',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookvolume', verbose_name='Volume Record'),
),
migrations.AddField(
model_name='correctionreference',
name='edition',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookedition', verbose_name='Edition'),
),
migrations.AddField(
model_name='interpretationreference',
name='address',
field=models.TextField(blank=True, null=True, verbose_name='Address'),
),
migrations.AddField(
model_name='interpretationreference',
name='book_volume',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookvolume', verbose_name='Volume Record'),
),
migrations.AddField(
model_name='interpretationreference',
name='edition',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookedition', verbose_name='Edition'),
),
migrations.AddField(
model_name='originaltextreference',
name='address',
field=models.TextField(blank=True, null=True, verbose_name='Address'),
),
migrations.AddField(
model_name='originaltextreference',
name='book_volume',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookvolume', verbose_name='Volume Record'),
),
migrations.AddField(
model_name='originaltextreference',
name='edition',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hadis.bookedition', verbose_name='Edition'),
),
migrations.AlterField(
model_name='correctionreference',
name='volume',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Volume Text'),
),
migrations.AlterField(
model_name='interpretationreference',
name='volume',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Volume Text'),
),
migrations.AlterField(
model_name='originaltextreference',
name='url',
field=models.URLField(blank=True, max_length=1000, null=True),
),
migrations.AlterField(
model_name='originaltextreference',
name='volume',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Volume Text'),
),
]

18
apps/hadis/migrations/0022_hadisinterpretation_slug.py

@ -0,0 +1,18 @@
# Generated by Django 5.2.12 on 2026-06-23 11:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hadis', '0021_rename_page_originaltextreference_pages_and_more'),
]
operations = [
migrations.AddField(
model_name='hadisinterpretation',
name='slug',
field=models.SlugField(blank=True, max_length=255, verbose_name='slug'),
),
]

7
apps/hadis/models/hadis.py

@ -568,6 +568,7 @@ class HadisCorrection(models.Model):
class HadisInterpretation(models.Model): class HadisInterpretation(models.Model):
category = models.ForeignKey('HadisCategory', on_delete=models.CASCADE, related_name='interpretations', verbose_name=_('Category')) category = models.ForeignKey('HadisCategory', on_delete=models.CASCADE, related_name='interpretations', verbose_name=_('Category'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True, db_index=True) # 👈 فیلد جدید
legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True) legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True)
title = models.JSONField(default=list, verbose_name=_('Title')) title = models.JSONField(default=list, verbose_name=_('Title'))
@ -582,6 +583,12 @@ class HadisInterpretation(models.Model):
verbose_name = _("Hadis Interpretation") verbose_name = _("Hadis Interpretation")
verbose_name_plural = _("Hadis Interpretations") verbose_name_plural = _("Hadis Interpretations")
def save(self, *args, **kwargs):
# 👈 ست کردن اسلاگ تفسیر برابر با اسلاگ کتگوری
if self.category and self.category.slug:
self.slug = self.category.slug
super().save(*args, **kwargs)
# --- FOR CORRECTIONS --- # --- FOR CORRECTIONS ---
class CorrectionReference(models.Model): class CorrectionReference(models.Model):
correction = models.ForeignKey(HadisCorrection, on_delete=models.CASCADE, related_name='references') correction = models.ForeignKey(HadisCorrection, on_delete=models.CASCADE, related_name='references')

3
apps/hadis/urls.py

@ -120,8 +120,7 @@ urlpatterns = [
# path('debug-headers',debug_headers , name='headers'), # path('debug-headers',debug_headers , name='headers'),
# Interpretation Detail Endpoint (تفسیر بر اساس آی‌دی) # Interpretation Detail Endpoint (تفسیر بر اساس آی‌دی)
path('interpretations/<int:interpretation_id>/', HadisInterpretationDetailView.as_view(), name='interpretation-detail'),
path('interpretations/<str:interpretation_slug>/', HadisInterpretationDetailView.as_view(), name='interpretation-detail'),
# Correction Detail Endpoint (تصحیح بر اساس اسلاگ) # Correction Detail Endpoint (تصحیح بر اساس اسلاگ)
path('corrections/<str:correction_slug>/', HadisCorrectionDetailView.as_view(), name='correction-detail'), path('corrections/<str:correction_slug>/', HadisCorrectionDetailView.as_view(), name='correction-detail'),

20
apps/hadis/views/hadis.py

@ -858,10 +858,10 @@ class HadisCorrectionDetailView(RetrieveAPIView):
) )
class HadisInterpretationDetailView(RetrieveAPIView): class HadisInterpretationDetailView(RetrieveAPIView):
"""API View to get full details of a specific HadisInterpretation by ID"""
"""API View to get full details of a specific HadisInterpretation by slug"""
serializer_class = HadisInterpretationDetailSerializer serializer_class = HadisInterpretationDetailSerializer
lookup_field = 'id'
lookup_url_kwarg = 'interpretation_id'
lookup_field = 'slug' # 👈 تغییر به slug
lookup_url_kwarg = 'interpretation_slug'
permission_classes = [AllowAny] permission_classes = [AllowAny]
def get_queryset(self): def get_queryset(self):
@ -873,3 +873,17 @@ class HadisInterpretationDetailView(RetrieveAPIView):
'references__book_volume', 'references__book_volume',
'references__images' 'references__images'
) )
# 👈 هندل کردن حالت امن برای زمانی که چند تفسیر در یک کتگوری باشند
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
obj = queryset.filter(**filter_kwargs).first() # گرفتن اولین آبجکت
if not obj:
raise Http404("No HadisInterpretation matches the given query.")
self.check_object_permissions(self.request, obj)
return obj
Loading…
Cancel
Save