2 Commits
01618b0a6c
...
e3da089b2c
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
e3da089b2c |
fix(hadis): resolve CORS preflight headers and query param normalization
- Allow 'cache-control' and 'pragma' headers in CORS_ALLOW_HEADERS to prevent CORS preflight errors on transmitter and hadith requests - Support both 'hadis' and 'hadis_id' query parameters in AdminHadisCorrectionViewSet - Support both 'category' and 'category_id' query parameters in AdminHadisInterpretationViewSet - Support both 'hadis'/'hadis_id' and 'reference'/'reference_id' in AdminHadisReferenceImageViewSet upload handler |
3 weeks ago |
|
|
541a381812 |
feat(hadis): support per-language secondary translations and category verse filtering
- Refactor QuranSecondaryTranslation to store language_code, translation_text and translator per record - Add migrations 0042 and 0043 to migrate existing secondary translations - Update AdminCategoryQuranVerseSerializer and AdminHadisCategorySerializer with proper secondary translations handling - Support category filtering by source_type, has_quran_verse and exclude_verse_id in admin category viewset |
3 weeks ago |
7 changed files with 252 additions and 54 deletions
-
77apps/hadis/migrations/0042_add_secondary_quran_fields.py
-
30apps/hadis/migrations/0043_finalize_secondary_quran_translations.py
-
18apps/hadis/models/category.py
-
19apps/hadis/serializers/category.py
-
42apps/hadis/serializers/serializers_admin.py
-
62apps/hadis/views_admin.py
-
6config/settings/base.py
@ -0,0 +1,77 @@ |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
def migrate_secondary_translations_forward(apps, schema_editor): |
|||
QuranSecondaryTranslation = apps.get_model('hadis', 'QuranSecondaryTranslation') |
|||
|
|||
for obj in list(QuranSecondaryTranslation.objects.all()): |
|||
trans_list = obj.translation_text or [] |
|||
auth_list = obj.translator or [] |
|||
|
|||
trans_map = {} |
|||
if isinstance(trans_list, list): |
|||
for item in trans_list: |
|||
if isinstance(item, dict) and item.get('language_code'): |
|||
trans_map[item['language_code']] = item.get('text') or item.get('title') or '' |
|||
elif isinstance(trans_list, str): |
|||
trans_map['ru'] = trans_list |
|||
|
|||
auth_map = {} |
|||
if isinstance(auth_list, list): |
|||
for item in auth_list: |
|||
if isinstance(item, dict) and item.get('language_code'): |
|||
auth_map[item['language_code']] = item.get('text') or item.get('title') or '' |
|||
elif isinstance(auth_list, str): |
|||
auth_map['ru'] = auth_list |
|||
|
|||
langs = list(set(trans_map.keys()) | set(auth_map.keys())) |
|||
if not langs: |
|||
langs = ['ru'] |
|||
|
|||
first_lang = langs[0] |
|||
obj.language_code = first_lang |
|||
obj.new_translation_text = trans_map.get(first_lang, '') |
|||
obj.new_translator = auth_map.get(first_lang, '') |
|||
obj.save(update_fields=['language_code', 'new_translation_text', 'new_translator']) |
|||
|
|||
for extra_lang in langs[1:]: |
|||
QuranSecondaryTranslation.objects.create( |
|||
quran_verse_id=obj.quran_verse_id, |
|||
language_code=extra_lang, |
|||
new_translation_text=trans_map.get(extra_lang, ''), |
|||
new_translator=auth_map.get(extra_lang, ''), |
|||
) |
|||
|
|||
|
|||
def migrate_secondary_translations_backward(apps, schema_editor): |
|||
pass |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
atomic = False |
|||
|
|||
dependencies = [ |
|||
('hadis', '0041_alter_hadisdatabaseversion_version_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='quransecondarytranslation', |
|||
name='language_code', |
|||
field=models.CharField(db_index=True, default='ru', max_length=10, verbose_name='Language Code'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='quransecondarytranslation', |
|||
name='new_translation_text', |
|||
field=models.TextField(default='', verbose_name='Translation Text'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='quransecondarytranslation', |
|||
name='new_translator', |
|||
field=models.CharField(default='', max_length=255, verbose_name='Translator Name'), |
|||
), |
|||
migrations.RunPython( |
|||
migrate_secondary_translations_forward, |
|||
migrate_secondary_translations_backward, |
|||
), |
|||
] |
|||
@ -0,0 +1,30 @@ |
|||
from django.db import migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
atomic = False |
|||
|
|||
dependencies = [ |
|||
('hadis', '0042_add_secondary_quran_fields'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RemoveField( |
|||
model_name='quransecondarytranslation', |
|||
name='translation_text', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='quransecondarytranslation', |
|||
name='translator', |
|||
), |
|||
migrations.RenameField( |
|||
model_name='quransecondarytranslation', |
|||
old_name='new_translation_text', |
|||
new_name='translation_text', |
|||
), |
|||
migrations.RenameField( |
|||
model_name='quransecondarytranslation', |
|||
old_name='new_translator', |
|||
new_name='translator', |
|||
), |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue