Browse Source
feat(transmitters): add Madhhab model, relational field, and admin endpoints
feat(transmitters): add Madhhab model, relational field, and admin endpoints
- Introduce Madhhab model with multilingual title, description, and slug - Link madhhabs relation (ManyToMany) to Transmitters - Add migration 0062 to create table and populate from existing madhab JSON data - Register DovodiMadhhabViewSet and admin routes in urls.py - Update RELATIONAL_MIGRATION_ROADMAP.md for madhhab migrationmaster
6 changed files with 264 additions and 27 deletions
-
49RELATIONAL_MIGRATION_ROADMAP.md
-
112apps/hadis/migrations/0062_madhhab_and_relations.py
-
47apps/hadis/models/transmitter.py
-
58apps/hadis/serializers/serializers_admin.py
-
5apps/hadis/urls.py
-
20apps/hadis/views_admin.py
@ -0,0 +1,112 @@ |
|||||
|
# Generated by Django 4.2.30 on 2026-10-20 15:23 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
MADHHAB_DATA = [ |
||||
|
{ |
||||
|
"slug": "shia", |
||||
|
"title": [ |
||||
|
{"language_code": "ar", "text": "شيعي", "title": "شيعي"}, |
||||
|
{"language_code": "fa", "text": "شیعه", "title": "شیعه"}, |
||||
|
{"language_code": "en", "text": "Shia", "title": "Shia"}, |
||||
|
{"language_code": "ru", "text": "Шиит", "title": "Шиит"}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
"slug": "sunni", |
||||
|
"title": [ |
||||
|
{"language_code": "ar", "text": "سني", "title": "سني"}, |
||||
|
{"language_code": "fa", "text": "سنی", "title": "سنی"}, |
||||
|
{"language_code": "en", "text": "Sunni", "title": "Sunni"}, |
||||
|
{"language_code": "ru", "text": "Суннит", "title": "Суннит"}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
"slug": "zaydi", |
||||
|
"title": [ |
||||
|
{"language_code": "ar", "text": "زيدي", "title": "زيدي"}, |
||||
|
{"language_code": "fa", "text": "زیدی", "title": "زیدی"}, |
||||
|
{"language_code": "en", "text": "Zaydi", "title": "Zaydi"}, |
||||
|
{"language_code": "ru", "text": "Зейдит", "title": "Зейдит"}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
"slug": "waqifi", |
||||
|
"title": [ |
||||
|
{"language_code": "ar", "text": "واقفي", "title": "واقفي"}, |
||||
|
{"language_code": "fa", "text": "واقفی", "title": "واقفی"}, |
||||
|
{"language_code": "en", "text": "Waqifi", "title": "Waqifi"}, |
||||
|
{"language_code": "ru", "text": "Вакифит", "title": "Вакифит"}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
"slug": "fathi", |
||||
|
"title": [ |
||||
|
{"language_code": "ar", "text": "فطحي", "title": "فطحي"}, |
||||
|
{"language_code": "fa", "text": "فطحی", "title": "فطحی"}, |
||||
|
{"language_code": "en", "text": "Fathi", "title": "Fathi"}, |
||||
|
{"language_code": "ru", "text": "Фатхит", "title": "Фатхиت"}, |
||||
|
], |
||||
|
}, |
||||
|
] |
||||
|
|
||||
|
|
||||
|
def seed_and_migrate_madhhabs(apps, schema_editor): |
||||
|
Madhhab = apps.get_model('hadis', 'Madhhab') |
||||
|
Transmitters = apps.get_model('hadis', 'Transmitters') |
||||
|
|
||||
|
madhhab_map = {} |
||||
|
for item in MADHHAB_DATA: |
||||
|
obj, _ = Madhhab.objects.get_or_create( |
||||
|
slug=item["slug"], |
||||
|
defaults={"title": item["title"]}, |
||||
|
) |
||||
|
madhhab_map[item["slug"]] = obj |
||||
|
|
||||
|
shia_obj = madhhab_map.get("shia") |
||||
|
sunni_obj = madhhab_map.get("sunni") |
||||
|
|
||||
|
if shia_obj: |
||||
|
for t in Transmitters.objects.filter(madhhab='shia'): |
||||
|
t.madhhabs.add(shia_obj) |
||||
|
|
||||
|
if sunni_obj: |
||||
|
for t in Transmitters.objects.filter(madhhab='sunni'): |
||||
|
t.madhhabs.add(sunni_obj) |
||||
|
|
||||
|
|
||||
|
def reverse_seed(apps, schema_editor): |
||||
|
pass |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('hadis', '0061_sahabi_status_and_relation'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Madhhab', |
||||
|
fields=[ |
||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('title', models.JSONField(default=list, verbose_name='Title')), |
||||
|
('slug', models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug')), |
||||
|
('description', models.JSONField(blank=True, default=list, verbose_name='Description')), |
||||
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), |
||||
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Madhhab', |
||||
|
'verbose_name_plural': 'Madhhabs', |
||||
|
'ordering': ['slug', 'id'], |
||||
|
}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='transmitters', |
||||
|
name='madhhabs', |
||||
|
field=models.ManyToManyField(blank=True, related_name='transmitters', to='hadis.madhhab', verbose_name='Madhhabs (M2M)'), |
||||
|
), |
||||
|
migrations.RunPython(seed_and_migrate_madhhabs, reverse_seed), |
||||
|
] |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue